【问题标题】:How to push object by following its structure to array of objects如何按照对象的结构将对象推送到对象数组
【发布时间】:2018-12-21 12:24:37
【问题描述】:

这是我的对象结构

var obj = {'name':string,'place':string};

这是另一个对象

var arr = 
{
'a':Alpha,
'b':Australia,
'a_x':Beta,
'b_y':Canada,
'a_3':Charlie,
'b_4':China,
}

我想把它推到合适的对象上

var finalArray = [
{'name':Alpha,'place':Australia},
{'name':Beta,'place':Canda},
{'name':Charlie,'place':China}
]

不知道如何开始迭代

请帮忙。提前致谢

【问题讨论】:

  • 什么链接 AlphaAustralia 在你的第二个对象?
  • 我正在从 excel 中读取它。它有两行,即 name , place , name place 这样的
  • 它没有告诉我你的第二个对象的两个单独的属性是如何链接的。
  • 键名不正确/结构不正确..但是值又出现了..即名称和地点
  • 对象属性没有顺序。因此,即使您这样创建对象,JavaScript 也不能​​保证以相同的顺序循环它们。

标签: javascript arrays loops object for-loop


【解决方案1】:

我们使用Object.values 来迭代这些值;和Array.reduce 构建最终的数组,遍历原始数据。

const arr = {
  a: 'Alpha',
  b: 'Australia',
  a_x: 'Beta',
  b_y: 'Canada',
  a_3: 'Charlie',
  b_4: 'China',
};

const finalArray = Object.values(arr).reduce((tmp, x, xi) => {
  // only treat one on two
  if (!(xi % 2)) return tmp;

  return [
    ...tmp,

    {
      // Get the previous key value
      name: arr[Object.keys(arr)[xi - 1]],

      place: x,
    },
  ];
}, []);

console.log(finalArray);

【讨论】:

    【解决方案2】:

    您可以遍历对象的值并根据索引将对象推送到数组中。

    const input = { 'a': 'Alpha', 'b': 'Australia', 'a_x': 'Beta', 'b_y': 'Canada', 'a_3': 'Charlie', 'b_4': 'China' },
          result = Object.values(input).reduce((r,k,i) => {
            i%2 == 0 ? r.push({name: k})  : r[Math.floor(i/2)].place = k;
            return r;
          },[]);
    console.log(result);

    【讨论】:

    • @SA__:不可靠,解决方案完全基于排序,对象中属性的顺序不能保证。
    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多