Object.entries将对象数组转换为字符串的替代方法

时间:2020-07-10 11:26:24

标签: javascript ecmascript-6

我尝试根据此人对象数组打印"person[0].name: a""person[1].name: b",依此类推:

我两次使用对象条目,是否有其他方法可以使循环更有效?

const person = [{
  name: 'a',
}, {
  name: 'b'
}]

Object.entries(person).forEach(([key, value]) => {
  Object.entries(value).forEach(([key2, value2]) => {
    console.log(`person[${key}].${key2}`, ':', value2)
  })
})

3 个答案:

答案 0 :(得分:1)

您可以采用递归方法并移交父路径。

const
    show = (object, parent) => {
        const wrap = Array.isArray(object) ? v => `[${v}]` : v => `.${v}`;
        Object.entries(object).forEach(([k, v]) => {
            if (v && typeof v === 'object') show(v, parent + wrap(k));
            else console.log(parent + wrap(k), v);
        });
    },
    person = [{ name: 'a' }, { name: 'b' }];

show(person, 'person');

答案 1 :(得分:0)

您真的不需要第一通电话。 person已经是一个数组。

const person = [{
  name: 'a',
}, {
  name: 'b'
}]


person.forEach((value, key) => {
  Object.entries(value).forEach(([key2, value2]) => {
    console.log(`person[${key}].${key2}`, ':', value2)
  })
})

以防forEach副作用。如果要使用转换后的值创建另一个数组,则最好改用map / flatMap

const person = [{
  name: 'a',
}, {
  name: 'b'
}]


const transformed = person.flatMap((value, key) => {
  return Object.entries(value).map(([key2, value2]) => `person[${key}].${key2}:${value2}`)
})

console.log(transformed)

答案 2 :(得分:0)

您还可以尝试这样的操作,仅需一个forEach()循环

const person = [{
    name: 'a',
  },{
      name: 'b'
  }];
  
  
person.forEach((el,i) => {
        let prop = Object.keys(el).toString();
        
        console.log(`person[${i}].${prop}`, ':', el[prop])  
});