首页 > 解决方案 > 如何基于两个数组创建一个数组

问题描述

我有一个对象数组,这个数组包含不同的名称。

[ "Foo", "Bar", "Test", "Other" ];

还有另一个对象数组

[ { name:"Bar", value: 159 }, { name: "Foo", value: 120 }, { name: "Other", value: 1230 } ]

我需要为它们创建一个数组,新数组包含大小为 2 的子数组,第一个索引名称,第二个索引值。数组的顺序需要与第一个(名称数组)相同。

喜欢

[ ["Foo", 120], ["Bar", 159], ["Test", undefined], ["Other", 1230] ]

所以我尝试了这段代码,但我的输出不正确。名称顺序正确,但值顺序不正确。

var order = ["Foo", "Bar", "Test", "Other"];
var values = [{ name: "Bar", value: 159 }, { name: "Foo", value: 120 }, { name: "Other", value: 1230 }];

var array = order.map(function(name, i) {
  return [name, (values[i] && values[i].value) ];
})

console.log(array)

标签: javascriptarraysobject

解决方案


你快到了 - 你只需要find正确的值:

var order = ["Foo", "Bar", "Test", "Other"];
var values = [{ name: "Bar", value: 159 }, { name: "Foo", value: 120 }, { name: "Other", value: 1230 }];

var array = order.map(function(name, i) {
  return [name, values.some(e => e.name == name) ? values.find(e => e.name == name).value : undefined];
})

console.log(array)

ES5 语法:

var order = ["Foo", "Bar", "Test", "Other"];
var values = [{ name: "Bar", value: 159 }, { name: "Foo", value: 120 }, { name: "Other", value: 1230 }];

var array = order.map(function(name, i) {
  return [name, values.some(function(e) { 
    return e.name == name;
  }) ? values.find(function(e) {
    return e.name == name;
  }).value : undefined];
});

console.log(array)


推荐阅读