循环遍历一个对象并返回一个对象数组

unt*_*tyy 0 javascript object reactjs

我怎样才能循环这个对象(数据)并返回一个对象数组(输出)就像这样。基本上具有这些特定的属性和值

data = {
"model-10389": 164703,
"model-10388": 164704,
"model-10387": 164705,
}


const output  = [
{
  modelId : 10389,
 id : 164703
},
{
  modelId : 10388,
  id : 164704
},
{
  modelId : 10387,
  id : 164705
},
]
Run Code Online (Sandbox Code Playgroud)

这就是我现在所拥有的

Object.keys(data).map(function(key, index) {
 console.log(data[key])
});
Run Code Online (Sandbox Code Playgroud)

或这个

for (const property in data) {
console.log(`${property}: ${data[property]}`);
}
Run Code Online (Sandbox Code Playgroud)

Cer*_*rus 5

将问题分解为小部分:

  1. 获取源对象的所有“条目” 。
  2. 这些条目需要转换,我们可以使用Array.map
  3. 每个条目都是一个[key, value]数组,我们可以使用解构.map轻松访问。
  4. 对于modelId,我们需要.splitkey,并获取 后面的部分-,然后将其解析为数字。
  5. id只是价值。

const data = { "model-10389": 164703, "model-10388": 164704, "model-10387": 164705 };

const result = Object.entries(data)
  .map(([key, value]) => ({
    modelId: parseInt(key.split('-')[1], 10),
    id: value
  }));

console.log(result);
Run Code Online (Sandbox Code Playgroud)

split, id 使用正则表达式提取 id 更快的替代方案:

modelId: parseInt(key.match(/\d+/)[0], 10),
Run Code Online (Sandbox Code Playgroud)

但是,如果我们要尽可能优化此转换,我们将不得不进行更多更改:

  • 一元+代替parseInt.
  • for in循环而不是Object.entriesand .map
  • 正则表达式代替.split

这会让你:

modelId: parseInt(key.match(/\d+/)[0], 10),
Run Code Online (Sandbox Code Playgroud)