我学习了如何将2d数组转换为对象,如下所示。然而,在这种情况下,我们准确地知道密钥和密钥名的数量(3键:名称、价格、地点):
const myArray = [
['Rice', '$6', 'super market'],
['water', '$7', 'traditional market']
];
const myObj = myArray
.map(([name, price, place]) => ({ name, price, place }));
console.log(myObj);如何在密钥和密钥名未知的情况下具有相同的功能?例如,myArray可以是
const myArray = [
['Rice', '$6'],
['water', '$7']
];或
const myArray = [
['Rice', '$6',"promotion"],
['water', '$7',"normal"]
];或者别的什么,我也有一个相应的键名数组,如“名称”、“价格”、“促销”,用于每种类型的数组。
谢谢,
我试图将名称、价格、下面的位置替换为已定义的密钥名变量,但它没有工作。
const myObj = myArray
.map(([name, price, place]) => ({ name, price, place }));发布于 2022-11-12 16:52:13
Object.fromEntries()需要一个包含键值对的数组,这不是您目前所拥有的。如果将2D数组中的每一行Array.map()为键值对,则可以使用它。或者,使用Array.forEach()。下面是这两种方法的演示:
function test() {
const keys = ['name', 'price', 'promotion',];
const array2d = [
['Rice', '$6', 'super market'],
['water', '$7', 'traditional market'],
];
console.log(arraysToObjects1_(keys, array2d));
console.log(arraysToObjects2_(keys, array2d));
}
function arraysToObjects1_(keys, array2d) {
return array2d.map(row => Object.fromEntries(row.map((value, index) => [keys[index], value])));
}
function arraysToObjects2_(keys, array2d) {
const result = [];
array2d.forEach(row => {
const obj = {};
keys.forEach((key, index) => obj[key] = row[index]);
result.push(obj);
});
return result;
}https://stackoverflow.com/questions/74412103
复制相似问题