我有两个数组:
.classpath
我如何制作一个新数组,结果为:
var odd = [
{ name : "1", extraProp1 : "propValue1" },
{ name : "3", extraProp1 : "propValue2"}
];
var even = [
{ name : "1", extraProp2 : "prop1" },
{ name : "2", extraProp2 : "prop2"},
{ name : "4", extraProp2 : "prop3" }
];
需要根据name属性添加它们。
编辑:这是对Merge 2 arrays of objects的引用 我也看过了:How can I merge properties of two JavaScript objects dynamically?
但是,当我这样做
var result = [{ name : "1", extraProp1 : "propValue1", extraProp2 : "prop1"}];
仅从一个数组获取属性。
答案 0 :(得分:0)
我能看到的最有效的方法(尽管可能没有利用JS预定义功能)是用name
值作为键来组成字典。
您可以遍历第一个数组并填充字典。然后,您可以遍历第二个数组,如果每个元素不包含name
,则将其添加到字典中;如果包含var odd = [
{ name : "1", extraProp1 : "propValue1" },
{ name : "3", extraProp1 : "propValue2"}
];
var even = [
{ name : "1", extraProp2 : "prop1" },
{ name : "2", extraProp2 : "prop2"},
{ name : "4", extraProp2 : "prop3" }
];
var combinedDictionary = {}
for(let obj of odd) {
combinedDictionary[obj.name] = obj;
}
for(let obj of even) {
combinedDictionary[obj.name] = {
...(combinedDictionary[obj.name] || {}),
...obj
};
}
var result = Object.keys(combinedDictionary).map(key => combinedDictionary[key]);
console.log(result);
,则可以合并对象。
示例:
JSONObject jsonObject = new JSONObject(message.getBody());
JSONObject obj= new JSONObject(jsonObject.getString("Message"));
答案 1 :(得分:0)
实际上,您在尝试正确过滤import SwiftUI
import Firebase
@main
struct BookSpine2App: App {
init() {
FirebaseApp.configure()
}
var body: some Scene {
WindowGroup {
BooksListView()
}
}
}
,但是没有合并两个对象的代码。
与嵌套调用a
相比,我还可以使用Map
进行查找:
filter
function merge(a, b, prop) {
let map = new Map(b.map(o => [o[prop], o]));
return a.reduce((acc, o) => {
let match = map.get(o[prop]);
return match ? acc.concat({ ...o, ...match }) : acc;
}, []);
}
var odd = [
{ name : "1", extraProp1 : "propValue1" },
{ name : "3", extraProp1 : "propValue2"}
];
var even = [
{ name : "1", extraProp2 : "prop1" },
{ name : "2", extraProp2 : "prop2"},
{ name : "4", extraProp2 : "prop3" }
];
console.log(merge(odd, even, "name"));
部分执行解决方案中缺少的两个对象的实际合并。