将对象映射为数组

3

假设有这样一个对象:

{
  aaa: {
    text: "Text1",
    path: "Path1",
    type: "Type1"
  },
  bbb: {
    text: "Text2",
    path: "Path2",
    type: "Type2"
  },
...
}

什么是返回该数组的最简单方法:
[
   {value: "aaa", label: "Text1"},
   {value: "bbb", label: "Text2"}
]

我需要循环整个对象吗?我认为可以使用 Object.keys()Object.values() 来简化。


请展示一下你目前所尝试的,并解释一下尝试过程中出现的问题(错误、意外结果等)。提示:Object.entries()能够帮助解决这个问题。 - p.s.w.g
5个回答

2
你可以使用Object.entries将对象转换为数组,使用map来循环并返回所需的对象。最初的回答。

let obj = {
  aaa: {
    text: "Text1",
    path: "Path1",
    type: "Type1"
  },
  bbb: {
    text: "Text2",
    path: "Path2",
    type: "Type2"
  },
}

let result = Object.entries(obj).map(([k, v]) => ({value: k,label: v.text}));

console.log(result);


1
这可以帮助。

const obj = {
  aaa: {
    text: "Text1",
    path: "Path1",
    type: "Type1"
  },
  bbb: {
    text: "Text2",
    path: "Path2",
    type: "Type2"
  },
};
const ans = Object.keys(obj).map(itm => ({value: itm, title: obj[itm].text}))

console.log(ans);


1
你需要循环这些键值,使用 Object.entries 方法获取键值对,然后使用 Array#map 方法进行迭代并生成新数组。

let data = {"aaa":{"text":"Text1","path":"Path1","type":"Type1"},"bbb":{"text":"Text2","path":"Path2","type":"Type2"}};

let res = Object.entries(data).map(([value, { text: title }]) => ({ value, title }))

console.log(res)


1

您可以使用for..in循环来迭代对象并将值推入数组中

let obj = {
  aaa: {
    text: "Text1",
    path: "Path1",
    type: "Type1"
  },
  bbb: {
    text: "Text2",
    path: "Path2",
    type: "Type2"
  }
}
let modObj = [];

for (let keys in obj) {
  modObj.push({
    value: keys,
    label: obj[keys].text
  })
};

console.log(modObj)


0

由于没有人像你在问题中提到的那样同时使用Object.keys和Object.values...

var obj = {
  aaa: {
    text: "Text1",
    path: "Path1",
    type: "Type1"
  },
  bbb: {
    text: "Text2",
    path: "Path2",
    type: "Type2"
  }
};

var result = Object.keys(obj).map(function(key, i){
  return {value: key, label: Object.values(obj)[i].text}
});

console.log(result);


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