减少 javascript 个对象

Reduce javascript object

我有这个 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;
}

感谢您的帮助。

您可以使用 Array#reduce with a computed property 和数组中的第一个元素。

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

The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.

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);

All I've succeeded to do is having:

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

我不知道你 "succeeded" 是怎么得到的,因为 JS 中不存在这种对象(你的原始对象也不存在)。你的意思是在它周围放置 [] 而不是 {} (换句话说,它是一个小对象数组)吗?如果是,则结合

 Object.assign({}, ...littleObjects)

顺便说一句,如果你愿意,你可以称它为 "flattening",但这会让人感到困惑,因为它与人们通常所说的 "flattening"(意思是折叠嵌套数组)完全不同).