javascript - 用对象内部的内容替换数组的最佳方法
问题描述
我得到了以下 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
}
}
它返回格式正确的对象。
我的问题是这是否是获得我正在寻找的结果的最高效和/或最明显的方法?
解决方案
如果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 };
注意:这只适用于您提供的对象模式。如果您的实际代码不同,则需要对其进行调整。
推荐阅读
- angular - Angular 7、量角器和 Jasmine HTTP 请求
- python - 在 Python 中将 dict(x,y) 转换为 df
- python - Using async-await over Thread + Queue or ThreadPoolExecutor?
- express - 无法在 node express 中创建 zip 文件:错误 21
- vue.js - Nuxt Bulma app can't access SCSS variables
- propel2 - Propel2 Reverse 第二次运行已删除列
- ruby - 试图在 ruby "127.0.0.1" 端口 9514 (Errno::EADDRNOTAVAIL) 中运行 selenium
- java - Guaranteed to run function before AWS lambda exits
- java - 如何抑制 java.util.logging 中的特定记录器?
- sql - Lookup tables - should I use an id column or just use the value?