JavaScript - 将对象转换为数组对象

9

尝试将以下对象(从API响应中获取)转换为数组对象。

const oldObj = {
    Georgia : {
        notes: "lorem ipsum",
        lat: "32.1656",
        long: "82.9001"
    },
    Alabama : {
        notes: "lorem ipsum",
        lat: "32.3182",
        long: "86.9023"
    }
}

My expected like bellow:

const desireArray = [
    {
        name: "Georgia",
        notes: "lorem ipsum",
        lat: "32.1656",
        long: "82.9001"
    },
    {
        name: "Alabama",
        notes: "lorem ipsum",
        lat: "32.3182",
        long: "86.9023"
    }
];

尝试使用forEach,但我认为这不是正确的方式,似乎会返回错误。
oldObj.forEach((el, i) => {
    console.log(el);
});

类型错误: oldObj.forEach 不是一个函数

需要帮助吗?

4个回答

12

forEach 是针对数组的方法,而您的oldObj是对象

首先您需要将其转换为数组,这里可以将对象转换为键值对数组

使用map可以让代码更简洁

const oldObj = {
  Georgia: {
    notes: "lorem ipsum",
    lat: "32.1656",
    long: "82.9001",
  },
  Alabama: {
    notes: "lorem ipsum",
    lat: "32.3182",
    long: "86.9023",
  },
}

const res = Object.entries(oldObj).map(([name, obj]) => ({ name, ...obj }))

console.log(res)

References

Object.entries()


2
([name, obj]) => ... -> 解构赋值,...obj -> 展开语法 - Andreas

1
const oldObj = {
    Georgia : {
        notes: "lorem ipsum",
        lat: "32.1656",
        long: "82.9001"
    },
    Alabama : {
        notes: "lorem ipsum",
        lat: "32.3182",
        long: "86.9023"
    }
}

const desireArray = Object.keys(oldObj).map((key) => ({ name: key, ...oldObj[key] }));

解释一下
const keys = Object.keys(oldObj);
const desireArray = keys.map((key) => {
    return {
        name: key,
        notes: oldObj[key].notes,
        lat: oldObj[key].lat,
        long: oldObj[key].long
    }
});

1
  1. 使用 Object.entries 找到条目
  2. 通过 解构 将当前对象添加键到累加器中进行缩减
  3. 将结果推入数组中

const oldObj = {
    Georgia : {
        notes: "lorem ipsum",
        lat: "32.1656",
        long: "82.9001"
    },
    Alabama : {
        notes: "lorem ipsum",
        lat: "32.3182",
        long: "86.9023"
    }
};

const result = Object.entries(oldObj).reduce((acc, curr) => {
    const [key, val] = curr;
    
    acc.push({
        name: key,
        ...val
    });
    return acc;
}, []);

console.log(result);


0

const oldObj = {
    Georgia : {
        notes: "lorem ipsum",
        lat: "32.1656",
        long: "82.9001"
    },
    Alabama : {
        notes: "lorem ipsum",
        lat: "32.3182",
        long: "86.9023"
    }
};

function convertObjToArr(obj) {
  let result = [];
  for(let key in obj) {
    result.push({name: key, ...obj[key]});
  }
  return result;
}

console.log(convertObjToArr(oldObj));

或者尝试其他简单的解决方案。

 return Object.keys(obj).map(item => ( {name: item, ...obj[item]} ));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接