面向对象的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()
方法,并将其转换为字符串(请参阅我的工作片段以获得确认)。您是对的,因为它是数组数据,谢谢您的帮助