首页 > 解决方案 > 用对象内部的内容替换数组的最佳方法

问题描述

我得到了以下 JavaScript 对象:

{
    name: [
        {
            "firstName":"First ",
            "lastName":"Last"
        }
    ],
    age: 21
}

属性(或其他类似的name复杂道具)始终作为数组中的对象提供,即使只能有一个值。

我需要将信息保存为如下所示的对象(没有name属性值周围的数组):

{ 
    name: { 
        firstName: 'First ',
        lastName: 'Last' 
    }, 
    age: 21
}

我需要一个不引用特定属性名称的通用函数,因为它会根据查询而变化。这是我的解决方案:

const object = {
    name: [{"firstName":"First ","lastName":"Last"}],
    age: 21
}
const data = {}

for (const property in object) {
    const value = object[property]
    if (Array.isArray(value)) {
        data[property] = value[0]
    } else {
        data[property] = value
    }
}

它返回格式正确的对象。

我的问题是这是否是获得我正在寻找的结果的最高效和/或最明显的方法?

标签: javascript

解决方案


如果name数组保证是only ever have 1 object inside of it并且是always an array,你可以这样做:

const data = {
    name: [
        {
            "firstName":"First ",
            "lastName":"Last"
        }
    ],
    age: 21
};

if(data.name.length === 0) {
    const newObj = {
        name: data.name[0],
        age: data.age 
    };
};

console.log(newObj); // { firstName: 'First ', lastName: 'Last', age: 21 }

编辑

name实际上是任何任意键名时,您可以执行以下操作:

const data = {
    name: [
        {
            "firstName":"First ",
            "lastName":"Last"
        }
    ],
    age: 21
};

const objKeys = Object.keys(data);

console.log(objKeys) // > Array ["name", "age"]

let arbKey = objKeys.filter(objKey => objKey !== "age")[0];
console.log(arbKey); // > "name"

const newObj = {
    arbKey: data[arbKey][0],
    age: data.age
};

console.log(newObj); // > Object { arbKey: Object { firstName: "First ", lastName: "Last" }, age: 21 };

注意:这只适用于您提供的对象模式。如果您的实际代码不同,则需要对其进行调整。


推荐阅读