减少javascript对象

时间:2016-12-23 12:12:58

标签: javascript ecmascript-6 flatten

我有这个javascript对象:

{
    {
        long_name: "10",
        types: [
            0: "street_number"
        ],
    },
    {
        long_name: "street",
        types: [
            0: "route"
        ],
    },
    {
        long_name: "Paris",
        types: [
            0: "locality"
        ],
    },
    ...
}

我想要压扁它并有类似的东西:

{
    street_number: "10",
    route: "street",
    locality: "Paris",
    ...
}

我正在使用ES6,但无法将其弄平, 我所做的就是:

{
    {street_number: "10"},
    {route: "street"},
    {locality: "Paris"},
    ...
}

这是我试过的:

const flattenedObject = originalObject.map(flatten);
...
function flatten(element) {
    let obj = {};
    obj[element.types[0]] = element.long_name;

    return obj;
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以将Array#reducecomputed property一起使用,并将第一个元素仅用于数组。

关键功能是Object.assign,用于向结果对象添加属性。

  

Object.assign()方法用于将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。



var data = [{ long_name: "10", types: ["street_number"], }, { long_name: "street", types: ["route"], }, { long_name: "Paris", types: ["locality"], }],
    object = data.reduce((r, a) => Object.assign(r, { [a.types[0]]: a.long_name }), {});

console.log(object);




答案 1 :(得分:2)

  

我所做的就是:

{
  {street_number: "10"},
  {route: "street"},
  {locality: "Paris"},
  ...
}

我不知道你如何成功"在这方面,因为JS中不存在这样的对象(原始对象也不存在)。您的意思是将[]放在它周围而不是{}(换句话说,它是一个小对象数组)吗?如果是,则与

结合使用
 Object.assign({}, ...littleObjects)

顺便说一下,你可以称之为"展平"如果你愿意,但它会让人感到困惑,因为它与人们通常所说的“扁平化”有很大的不同。 (意思是折叠嵌套数组)。