相交并合并两个对象数组

时间:2020-06-24 18:52:34

标签: javascript

我有两个数组:

.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"}];

仅从一个数组获取属性。

2 个答案:

答案 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"));部分执行解决方案中缺少的两个对象的实际合并。