首页 > 解决方案 > 面向对象的 Javascript 在嵌入式数组中创建格式错误的数据

问题描述

我正在使用这段代码,它可以工作,但我最终得到的数据看起来像下面示例对象中的数组["\"colour"\", "\"colour"\", "\"colour"\"]内部。"colours_available":[]

// Array holding object data
var arr = [];

// Example of object in array
{
  "id": 101,
  "name": "Scott",
  "colours_available: ["red", "blue", "black"],
  "key_group": 1
}

// Target id to check
var x = 101;

// Current colour in loop 
var colour = "silver";

// Get index of target (Search array for matching object)
objIndex = arr.findIndex((obj => obj.id == x));

// Check if data exists (A)
var z = arr[objIndex].colours_available.includes('"' + colour + '"');

// If data does not exist insert data (B)
if (z == false) {
    arr[objIndex].colours_available.push('"' + colour + '"');
}

我最初尝试将这些数据发布到对象数组中,而不用 (A) 和 (B) 中的引号括起来和连接,但这只是在我的示例中创建了许多数组,"colours_available":[]就像["colour"],["colour"],["colour"]上面的示例一样。

如何使我的数据导入看起来更像["colour","colour","colour"]是让我感到困惑,因为它在 jsfiddle 的示例中使用字符串但不适用于我的数据,这些数据只是转换为 JSON 的 xml 数据,为什么当我从 ( A) 和 (B) ?

标签: javascriptarraysobject

解决方案


既然你说如果你删除引号你最终会得到嵌套数组,我怀疑colour它实际上是一个数组而不是一个字符串。我建议你console.log(colour)在循环里面。

复制品:

const colour = ['Silver']
let colours = []

// No quotes
colours.push(colour)
console.log(colours) // -> [["Silver"]]

// With quotes
colours = []
colours.push('"' + colour + '"')
console.log(colours) // -> ["\"Silver\""]

// Correct (assuming colour is an array with one item):
colours = []
colours.push(colour[0])
console.log(colours) // -> ["Silver"]

// Calling Array.prototype.toString() explicitly:
console.log(colour.toString()) // -> "Silver"

// Concatenated with other text:
console.log("The colour is: " + colour) // -> "The colour is Silver"

// Straight up console.logging the array:
console.log(colour) // -> ["Silver"]

原因'"' + ["Silver"] + '"'就变成"\"Silver\""了,当您将字符串与数组连接时,数组会通过该Array.prototype.toString()方法静默转换为字符串。["Silver"].toString()例如,返回"Silver"


推荐阅读