首页 > 解决方案 > 在将数据推入数组时,不按顺序添加

问题描述

在此处输入图像描述

我需要一个接一个地推送数据,但是在这里我要像上次添加的数组一样乱序添加到第一个。

for (var key in data[tabName + scoreBreakDown]) {
  var values = data[tabName + scoreBreakDown][key];
  var staticData = values[0];
  var obj = [];
  obj.push(staticData.CompanyName);
  obj.push(staticData.Country_ORIG);
  for (var value in values) {
    if (addHeader) {
      headersArray.push(values[value].AspectName);
      weightArray.push(values[value].ScoreWeight);
    }
    obj.push(values[value].SPESGScore_ORIG);
  }
  addHeader = false;
  dataArray.push(obj);
}

在此处输入图像描述

标签: javascriptarrays

解决方案


您可以使用 array.map 映射一个数组并将其按顺序转换为一个新数组。

在这个例子中,我们只是将每个值乘以 3,但转换是任意的。

let loop = (arr) => {
  return arr.map(item => {
    return item*3
  })
}

console.log(loop([1,2,3,4,5]))

如果你想以这种方式循环一个对象,你可以使用 Object.keys() 这将返回对象中键的数组。

let loop = (obj) => {
  return Object.keys(obj).map(item => {
    return `${item}: ${obj[item]}`
  })
}

let obj = {
  first_name:"John",
  last_name:"Doe",
  age:23
}

console.log(loop(obj))

因此,与其使用 for 循环和 if 语句来检查条件并在每次迭代后将数据推送到数组中,不如使用 Array.filter() 删除不想推送的条目,并将它们返回命令。

data = [
  {header:true, value:"item1"}, 
  {header:false, value:"item2"},
  {header:true, value:"item3"},
 ]

let array = data.filter(item => {return item.header}).map(item => {
  return item.value
})

console.log(array)


推荐阅读