浏览foreach

时间:2017-12-21 14:26:37

标签: javascript arrays loops foreach

我有两个不同的数组相同的长度

myData = [["site_1", 3722, 2938, 2529, 3419, 3495, 3477],
          ["site_2", 115, 55, 56, 111, 113, 124],
          ["site_3", 13, 11, 10, 17, 17, 16],
          ["site_4", 16, 11, 10, 17, 17, 16],
          ["site_5", 0, 0, 0, 0, 0, 0]
         ];

booleanData = [true, false, false, true, true];

我已经在使用第一个数组来计算一些数据,我想使用第二个数组为数组的每个元素添加该信息。

_.chain(myCtrl.chartData.myData).forEach(data => {
myCtrl.legendData.push({
    siteName: data[0],
    color: myCtrl.chartData.chart.color(data[0])
});
}).value();

上面的代码工作正常,它遍历数组并从每个子数组中获取字符串并为其计算颜色。

我想添加booleanData,我尝试了这样:

_.chain(myCtrl.chartData.myData).forEach(data => {
myCtrl.legendData.push({
    siteName: data[0],
    color: myCtrl.chartData.chart.color(data[0]),
    hasIt: myCtrl.chartData.booleanData[data]
});
}).value();

我知道参数不应该是[data],但我不知道如何才能正常工作。

在这种情况下,我想要的结果是legendData

[ {siteName: "name_1", color: "#4ae412", hasIt: true},
  {siteName: "name_2", color: "#4ae412", hasIt: false},
  {siteName: "name_3", color: "#4ae412", hasIt: false},
  {siteName: "name_4", color: "#4ae412", hasIt: true},
  {siteName: "name_5", color: "#4ae412", hasIt: true}
]

颜色对此没有影响,你可以忽略它。

你有什么想法吗?

3 个答案:

答案 0 :(得分:2)

尝试使用forEach的以下用法,回调可以接受itemindex作为第二个参数。

var myData = [["site_1", 3722, 2938, 2529, 3419, 3495, 3477],
          ["site_2", 115, 55, 56, 111, 113, 124],
          ["site_3", 13, 11, 10, 17, 17, 16],
          ["site_4", 16, 11, 10, 17, 17, 16],
          ["site_5", 0, 0, 0, 0, 0, 0]
         ];

var booleanData = [true, false, false, true, true];

var result = {};
myData.forEach((item, index) => {
    let name = item[0]
    result[name] = booleanData[index]
})
console.log(result)
// {site_1: true, site_2: false, site_3: false, site_4: true, site_5: true}

答案 1 :(得分:2)

您可以映射新对象的所需属性并获取对象的数组。

var myData = [["site_1", 3722, 2938, 2529, 3419, 3495, 3477], ["site_2", 115, 55, 56, 111, 113, 124], ["site_3", 13, 11, 10, 17, 17, 16], ["site_4", 16, 11, 10, 17, 17, 16], ["site_5", 0, 0, 0, 0, 0, 0]],
    booleanData = [true, false, false, true, true],
    result = myData.map(([siteName], i) => ({ siteName, color: "#4ae412", hasIt: booleanData[i] }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:1)

使用forEach并严格按照您的要求保留,您可以获得结果:

var myData = [["site_1", 3722, 2938, 2529, 3419, 3495, 3477],
          ["site_2", 115, 55, 56, 111, 113, 124],
          ["site_3", 13, 11, 10, 17, 17, 16],
          ["site_4", 16, 11, 10, 17, 17, 16],
          ["site_5", 0, 0, 0, 0, 0, 0]
         ];

var booleanData = [true, false, false, true, true], legendData = [];

myData.forEach(function(x, i){
    legendData.push({sitename: myData[i][0], color: '#4ae412', hasIt: booleanData[i]});
});

console.log(legendData); // [{color: "#4ae412", hasIt: true, sitename: "site_1"}, {color: "#4ae412", hasIt: false, sitename: "site_2"}, {color: "#4ae412", hasIt: false, sitename: "site_2"}, {color: "#4ae412", hasIt: true, sitename: "site_4"}, {color: "#4ae412", hasIt: true, sitename: "site_5"}]

这是你的颜色硬编码,因为我不知道你是如何弄清楚颜色。但是你可以简单地进行计算并将其存储为变量,并用所述变量替换硬编码颜色。