繁体   English   中英

Javascript数组解构和Object.entries

[英]Javascript array de-structuring and Object.entries

这很简单: Object.entries 应该产生键和值对的Array 因此,我希望这段代码能解构

[{
  id: 1,
  name: "christian"
},{
  id : 2,
  name: "bongiorno"
}].map(Object.entries).forEach(([k,v]) => console.log(`${k}: ${v}`));

生产:

id:1 name:christian
id:2 name:bongiorno

但事实并非如此。 我得到了:

id,1: name,christian
id,2: name,bongiorno

我错过了什么?

输出是正确的,但是您的定义稍微有些偏离,您缺少数组级别(数组数组)。

应该假定Object.entries生成键,值对数组的数组。

 console.log( Object.entries({ id: 1, name: 'test' }) ) 

为了实现您想要的功能,您只需将日志更新为可用于嵌套数组的帐户即可:

 [{ id: 1, name: "christian" },{ id : 2, name: "bongiorno" }] .map(Object.entries) .forEach(([k, v]) => console.log( `${k.join(':')} ${v.join(':')}` )); 

还是您打算将每个数组弄平?

 [{ id: 1, name: "christian" },{ id : 2, name: "bongiorno" }] .map(Object.entries) .reduce((arr, curr) => arr.concat(curr), []) .forEach(([k,v]) => console.log(`${k}: ${v}`)); 

让我们尝试删除mapforEach ,看看您对每个对象做了什么:

let [k, v] = Object.entries({
  id: 1,
  name: "christian"
});
console.log(`${k}: ${v}`);

let [k, v] = Object.entries({
  id : 2,
  name: "bongiorno"
});
console.log(`${k}: ${v}`);

现在,如果我们扩展Object.entries调用, Object.entries变为

let [k, v] = [
  ["id", 1],
  ["name", "christian"]
];
console.log(`${k}: ${v}`);

let [k, v] = [
  ["id", 2],
  ["name", "bongiorno"]
];
console.log(`${k}: ${v}`);

可以非常准确地反映您所看到的内容kv正在分配数组。

您将需要嵌套两个循环:

const arr = [{
  id: 1,
  name: "christian"
}, {
  id: 2,
  name: "bongiorno"
}];
for (const obj of arr)
    for (const [k, v] of Object.entries(obj))
        console.log(k+": "+v);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM