javascript:循环遍历对象数组并将元素推送到一个数组中

时间:2018-05-14 20:49:56

标签: javascript arrays

我试图遍历一个对象数组(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(',')             
                );
            }

返回此信息:
enter image description here

我需要在上面的代码中添加什么才能使required_fields成为单个数组?谢谢!

6 个答案:

答案 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)

您可以简单地合并数组。

使用,加入数组条目。这将为您提供一个以,作为分隔符的单个字符串,然后您可以使用,拆分它们以获取数组

&#13;
&#13;
var r = [["Name","a","b"], ["Age","x","y"], ["hope","g","h"]];

console.log(r.join(",").split(','))
&#13;
&#13;
&#13;