如何基于两个数组创建数组

时间:2019-03-28 11:50:46

标签: javascript arrays object

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

[ "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)

6 个答案:

答案 0 :(得分:5)

您快到了-您只需要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)

答案 1 :(得分:5)

您可以拿一个Map并按照需要的顺序获取物品。

var names = [ "Foo", "Bar", "Test", "Other" ],
    objects = [{ name: "Bar", value: 159 }, { name: "Foo", value: 120 }, { name: "Other", value: 1230 }],
    map = new Map(objects.map(({ name, value }) => [name, value])),
    result = names.map(name => [name, map.get(name)])

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:4)

查看我的解决方案。希望这会有所帮助。

const a = [ "Foo", "Bar", "Test", "Other" ];
const b = [ { name:"Bar", value: 159 }, { name: "Foo", value: 120 }, { name: "Other", value: 1230 } ];

const res = a.map((item) => [ item, (b.find(({ name }) => name === item) || {}).value ])

console.log(res)

答案 3 :(得分:4)

您需要使用“顺序”中的条目来查找值中的“名称”

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(key, i) {
  let found = values.find(({name}) => name === key);
  return [key, found && found.value ];
})

console.log(array)

答案 4 :(得分:3)

您可以使用map并采用找到的项目的Object.values或默认值

 <uses-library android:name="android.test.base"
        android:required="false" />
 <uses-library android:name="android.test.mock"
        android:required="false" />

答案 5 :(得分:1)

var order = ["Foo", "Bar", "Test", "Other"];
var values = [{ name: "Bar", value: 159 }, { name: "Foo", value: 120 }, { name: "Other", value: 1230 }];
var result = [];
orders.forEach((f) => {
let found = false;

values.forEach(s => {
    if (f === s.name) {
result.push([f, s.value]);
        found = true;
}
});
if (!found) {
    result.push([f, undefined]);
}
});