Kam*_*lox 2 javascript arrays object
我有一个对象数组,此数组包含差异名称。
[ "Foo", "Bar", "Test", "Other" ];
Run Code Online (Sandbox Code Playgroud)
还有另一个对象数组
[ { name:"Bar", value: 159 }, { name: "Foo", value: 120 }, { name: "Other", value: 1230 } ]
Run Code Online (Sandbox Code Playgroud)
我需要创建一个数组,新数组包含大小为2的子数组,第一个索引是名称,第二个索引是值。数组的顺序必须与第一个(名称数组)的顺序相同。
喜欢
[ ["Foo", 120], ["Bar", 159], ["Test", undefined], ["Other", 1230] ]
Run Code Online (Sandbox Code Playgroud)
所以我尝试了这段代码,但是我的输出不正确。名称顺序正确,但值顺序不正确。
[ "Foo", "Bar", "Test", "Other" ];
Run Code Online (Sandbox Code Playgroud)
您快要准备好了-您只需要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)Run Code Online (Sandbox Code Playgroud)
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)Run Code Online (Sandbox Code Playgroud)
You could take a Map and get the items in the wanted order.
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);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)