遍历对象NodeJS的最佳方法

时间:2019-08-14 18:07:38

标签: javascript node.js foreach maps

在代码部分中,我得到了一个典型的JSON对象

想知道NodeJS中最好的循环方法是什么,由于某种原因,棉绒不喜欢我使用for(表示myArray的项),因为它抱怨“ ForOfStatement”。

我当前的输出如下:

Cont { id: 'Something1', mycontent: { foo: '1', bar: '1' } }
Cont { id: 'Something2', mycontent: { foo: '3', bar: '7' } }

那么我假设丢失了一些值是由于我使用Object.Entries作为其键值对,那么循环并保留这些键的最佳方法是什么?

myObject = [{
     "id": "Something1",
     "mycontent": [{
         "foo": "12",
         "foo": "1",
         "bar": "1"
     }]
 },
     {
         "id": "Something2",
         "mycontent": [{
             "foo": "3",
             "bar": "5",
             "bar": "7"
         }]
     }
]

Object.entries(myObject).forEach((item) => {
 let myContent = item[1];
 console.log("Cont", myContent);
});

我希望对象的输出显示为:

Something 1: foo: 12, 1 : bar 1; Something2 : foo: 3, bar: 5, 7

由于我有重复的键,不确定如何输出这些键

4 个答案:

答案 0 :(得分:1)

  

因此丢失一些我认为的值是由于我使用Object.Entries作为其键值对

您不会因为Object.Entries而丢失值,而是在尝试定义“ myObject”对象时就丢失了它们。 在JS对象中,每个键都是唯一的。 当您尝试定义此对象时:

{
     "id": "Something2",
     "mycontent": {
         "foo": "3",
         "bar": "5",
         "bar": "7"
     }
 }

您基本上只设置了一次“ bar”键,而第二个分配则覆盖了第一个分配,这就是得到输出的原因:

Cont { id: 'Something2', mycontent: { foo: '3', bar: '7' } }

代替

Cont { id: 'Something2', mycontent: { foo: '3', bar: '5', bar: '7' } }

作为一个小测试,尝试运行以下代码:

const myObj = {
    foo: '3',
    foo: '7'
};

console.log(myObj);

您会注意到输出为{foo: "7"},因为新值未附加到先前值,也未添加相同的键。

答案 1 :(得分:0)

据我所知,任何对象中的键都存储为字符串,当您两次使用相同的键foo时,它将覆盖第一个foo键值,并且两次使用bar都将覆盖它,只有最后一个bar键将被存储。您可以通过将foo和bar转换为数组以保存多个值来操纵存储的数据。

答案 2 :(得分:0)

您需要使用Array.prototype中的方法对其进行循环: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

myObject.forEach((item) => {
  const myContent = item[1];
  console.log("Cont", myContent);
});

答案 3 :(得分:0)

我设法解决了问题,以拔出重复的钥匙

myobject.map((c) => { 
const foo = c.mycontent 
.filter(label => label.type ==='foo') 
.map(label => label.code 
.join(', '); 

const bar = c.mycontent 
.filter(  ....... filter on bar just like above