Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
面向对象的Javascript在嵌入式数组中创建格式错误的数据_Javascript_Arrays_Object - Fatal编程技术网

面向对象的Javascript在嵌入式数组中创建格式错误的数据

面向对象的Javascript在嵌入式数组中创建格式错误的数据,javascript,arrays,object,Javascript,Arrays,Object,我正在使用这段代码,它可以工作,但我最终得到的数据在我的“colors\u available”中类似于[“\“color”\”、“\“color”\”、“\“color”\”]:[]数组,在下面的示例对象中 // Array holding object data var arr = []; // Example of object in array { "id": 101, "name": "Scott", "colours_available: ["red", "blue",

我正在使用这段代码,它可以工作,但我最终得到的数据在我的
“colors\u available”中类似于
[“\“color”\”、“\“color”\”、“\“color”\”]
:[]
数组,在下面的示例对象中

// 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)中使用引号进行包装和连接,但这只是在我的
“colors\u available”中创建了许多数组:[]
,在上面的示例中,这些数组看起来像
[“color”],[“color”],[“color”]


如何使我的数据导入看起来更像
[“color”,“color”,“color”]
这让我很困惑,因为它在JSFIDLE的示例中使用字符串,而不是我的数据,它只是转换为JSON的xml数据,为什么在我从(A)和(B)中删除引号时会创建新数组?

既然你说如果去掉引号,就会得到嵌套数组,我怀疑
color
实际上是一个数组而不是字符串。我建议您
console.log(彩色)
在循环内

复制品:

const color=['Silver']
让颜色=[]
//无报价
颜色。推送(颜色)
console.log(颜色)/->[[“银色”]]
//引用
颜色=[]
颜色。推送(“'”+颜色+“'”)
console.log(颜色)/->[“银色”]
//正确(假设颜色是一个包含一个项目的数组):
颜色=[]
颜色。推送(颜色[0])
控制台。原木(颜色)/->[“银色”]
//显式调用Array.prototype.toString():
console.log(color.toString())/->“银色”
//与其他文本连接:
console.log(“颜色为:”+颜色)/->“颜色为银色”
//直接向上控制台。记录阵列:
console.log(color)/->[“Silver”]
此代码返回[“color”、“color”、“color”]但我无法重现
[“\“color”\”、“\“color”\”、“\“color”\”]
问题,因此它可能是实际输入数据中的某些内容

//保存对象数据的数组
var-arr=[];
//数组中的对象示例
myObj变种={
“id”:101,
“姓名”:“斯科特”,
“可用颜色”:[“红色”、“蓝色”、“黑色”],
“关键小组”:1
}
arr.push(myObj);
//要检查的目标id
var x=101;
//循环中的当前颜色
var color=“银”;
//获取目标的索引(搜索匹配对象的数组)
objIndex=arr.findIndex((obj=>obj.id==x));
//检查数据是否存在(A)
var z=arr[objIndex]。颜色可用。包括(颜色);
//如果数据不存在,则插入数据(B)
如果(z==false){
arr[objIndex]。颜色可用。推送(颜色);
}

console.log(arr)
我不同意此代码是面向对象的。请重新阅读关于发布代码的指导。这看起来不像文章中的代码显示了您的问题。在字符串中添加引号非常奇怪-很可能您的实际问题来自
color
根本不是字符串-但根据发布的代码无法确认。请发帖澄清。通过您提供的代码(加上一些语法修复),我可以得到
颜色:(4)[“红色”、“蓝色”、“黑色”、“银色”]
。拿出你的位置,
,输出是可用的颜色:(4)[“红色”、“蓝色”、“黑色”、“银色”]。我无法重新创建你报告的输出。我们可以看到一些实际的输入数据吗?我最初尝试了这个方法,只是创建了重复的数组,例如
“可用颜色:[“红色”]、[“红色”]、[“红色”]
这部分代码是在循环中扫描和检查数据,然后再导入任何想法,为什么会出现这种情况?请参阅我的编辑-我认为
color
是一个数组,而不是一个字符串。我将添加一个片段来说明这将导致您描述的行为。我在节点中工作,我记录了它,我没有看到数组
console.log(“颜色等于:+color”)输出
颜色等于:绿色
这是通向
控制台的错误方式。记录它。您所做的与在代码中所做的相同,在代码中,您在代码周围串联引号。只需执行
console.log(color)
console.log('output color',color)
,您就会看到它是一个数组。在这里,您将一个字符串与
颜色
连接起来。如果
color
是一个数组,将字符串与其连接将导致调用其
toString()
方法,并将其转换为字符串(请参阅我的工作片段以获得确认)。您是对的,因为它是数组数据,谢谢您的帮助