我有两个不同的数组相同的长度。
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}
]
颜色对此没有影响,你可以忽略它。
你有什么想法吗?
答案 0 :(得分:2)
尝试使用forEach的以下用法,回调可以接受item
和index
作为第二个参数。
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"}]
这是你的颜色硬编码,因为我不知道你是如何弄清楚颜色。但是你可以简单地进行计算并将其存储为变量,并用所述变量替换硬编码颜色。