我试图遍历一个对象数组(data.list)并拉出一个元素(required_fields.display_value)并将它们推入另一个数组并连接。
我写了以下内容:
c.data.required_fields = [];
for(var i=0; i<c.data.list.length; i++) {
c.data.required_fields.push(
c.data.list[i].required_fields.display_value.split(',')
);
}
我需要在上面的代码中添加什么才能使required_fields成为单个数组?谢谢!
答案 0 :(得分:1)
c.data.required_fields = [];
for(var i=0; i<c.data.list.length; i++) {
c.data.required_fields = c.data.required_fields.concat(
c.data.list[i].required_fields.display_value.split(',')
);
}
这应该可以解决问题。由于每次调用.split都会返回一个数组,因此需要将该数组的内容连接到required_fields数组中。然而,Concat返回一个分支新数组,因此&#34; c.data.required_fields = c.data.required_fields.concat ...&#34;分配
**这是一个非常简单的修复方法。你当然可以通过reduce做一些更具可读性的东西,但我相信另一个答案已经涵盖了。
答案 1 :(得分:1)
问题是您在一次操作中推送每个list[i]
的所有值。这意味着您要将每个列表的所有元素添加到单个数组槽中,从而创建一个数组数组。
您可以做的一件事是在完成
之后展平阵列 c.data.require_field.flatten();
另一种选择是单独插入列表中的每个条目,而不是一次性全部输入:
for(var i=0; i<c.data.list.length; i++) {
var list = c.data.list[i];
//for each element in this list, add it to a new spot in the required_fields array
for(var j=0; j<list.length){
c.data.required_fields.push(
c.data.list[j].required_fields.display_value.split(',')
);
}
}
第一个可能更简单,更简洁,但第二个例子是为了清楚说明究竟出了什么问题而添加的
答案 2 :(得分:0)
如果您想展平您的数组,MDN上会有一段代码段:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatten
var arr1 = [1, 2, [3, 4]];
arr1.flatten();
//to flatten single level array
arr1.reduce((acc, val) => acc.concat(val), []);
// [1, 2, 3, 4]
答案 3 :(得分:0)
似乎您的值被拆分为一个新的数组,您不会迭代创建一维数组。我有两个建议。迭代循环中的split数组,或者首先连接所有逗号分隔的字符串,然后进行拆分。
"Connected to Brock AppDMZ VPN"
或者也许:
var dataArray = [];
var list = c.data.list;
list.forEAch(function(listItem){
var values = listItem.required_fields.display_value.split(',');
values.forEach(function(value){
dataArray.push(value);
});
}
c.data.required_fields = dataArray;
答案 4 :(得分:-1)
要使代码正常工作,您只需将其更改为
即可c.data.required_fields = [];
for(var i=0; i<c.data.list.length; i++) {
Array.prototype.push.apply(c.data.required_fields,
c.data.list[i].required_fields.display_value.split(',')
);
}
就像那样,您在Array
上调用push
的{{1}}方法,并使用c.data.required_fields
的内容作为单独的参数,而不是使用&#39的数组;将被推入另一个阵列。
答案 5 :(得分:-1)
您可以简单地合并数组。
使用,
加入数组条目。这将为您提供一个以,
作为分隔符的单个字符串,然后您可以使用,
拆分它们以获取数组
var r = [["Name","a","b"], ["Age","x","y"], ["hope","g","h"]];
console.log(r.join(",").split(','))
&#13;