我有一个数组(map
)数组,如下所示:
var map = [
['red', 'blue', 'yellow'],
['car', 'pen', 'table', 'cup', 'pillow'],
['5', '6', '1', '2', '10'],
['15', '2', '2', '3', '20'],
['50', '60', '13', '1', '1']
];
我希望在这个对象阵列中转换这个数组:
var jsons = [
{color: 'red', obj: 'car', value: '5'},
{color: 'red', obj: 'pen', value: '6'},
{color: 'red', obj: 'table', value: '1'},
{color: 'red', obj: 'cup', value: '2'},
{color: 'red', obj: 'pillow', value: '10'},
{color: 'blue', obj: 'car', value: '15'},
{color: 'blue', obj: 'pen', value: '2'},
{color: 'blue', obj: 'table', value: '2'},
{color: 'blue', obj: 'cup', value: '3'},
{color: 'blue', obj: 'pillow', value: '20'},
{color: 'yellow', obj: 'car', value: '50'},
{color: 'yellow', obj: 'pen', value: '60'},
{color: 'yellow', obj: 'table', value: '13'},
{color: 'yellow', obj: 'cup', value: '1'},
{color: 'yellow', obj: 'pillow', value: '1'}
];
我试过这段代码:
var thisJson = [];
var colors = map.shift();
var objs = map.shift();
thisJson = map.reduce(function(result, v, i) {
v.forEach(function(o, k) {
result.push({color: colors[k], obj: objs[i], value: o});
});
return result;
}, jsons);
但它没有用,因为我得到了:
[
{color: 'red', obj: 'car', value: '5'},
{color: 'blue', obj: 'pen', value: '6'},
{color: 'yellow', obj: 'table', value: '1'},
...
]
我该如何解决?
我可以将这些数据结构视为表格。 左边是我想要的桌子,右边是我得到的桌子。
很明显它们是不同的。
答案 0 :(得分:2)
您可以使用循环执行此操作:
var map = [
['red', 'blue', 'yellow'],
['car', 'pen', 'table', 'cup', 'pillow'],
['5', '6', '1', '2', '10'],
['15', '2', '2', '3', '20'],
['50', '60', '13', '1', '1']
];
var result = [];
for(var i = 0; i < map[0].length; i++){
var color = map[0][i];
for(var j = 0; j < map[1].length; j++){
result.push({color:color, obj: map[1][j], value: map[i+2][j]});
}
}
console.log(result);
&#13;
这里重要的部分是如何设置值value: map[i+2][j]
。使用colors数组中的索引设置该值。
此外,只有在values数组的元素数与objects数组的元素数相同且数组中的元素数量与数组一样多时,这才能正常工作。
答案 1 :(得分:1)
您可以使用shift
删除数组的第一个元素并将其存储在变量中。
您可以使用map
和reduce
来形成所需的输出。
这是一个片段。
let map = [
['red', 'blue', 'yellow'],
['car', 'pen', 'table', 'cup', 'pillow'],
['5', '6', '1', '2', '10'],
['15', '2', '2', '3', '20'],
['50', '60', '13', '1', '1']
];
let color = map.shift(); //Remove the first element on the array and store on a variable
let object = map.shift(); //Remove the first element on the array and store on a variable
//Map the rest
let jsons = map.map((v, i) => {
return v.map((o, k) => {return {color: color[i],obj: object[k],value: o};});
}).reduce((c, v) => c.concat(v), []);
console.log(jsons);
&#13;
答案 2 :(得分:1)
const result = [];
const keys = ["color", "obj", "value"];
for(const [key, values] of map.entries())
for(const [pos, value] of values.entries())
(result[pos] || (result[pos] = {}))[keys[key]] = value;