将javascript对象(属性+值)合并到一个对象中

Merging javascript objects (properties+values) into one object

本文关键字:合并 一个对象 javascript 对象 属性      更新时间:2023-09-26

所以我在尝试消除对重复数据的需要时遇到了这个问题。

假设我有一个物品清单。我根据一个特定的类别来区分它们。2个对象在Open"类别"中返回相同的数据。我不一定想删除数据,所以我认为合并/组合是最好的方法?

如果属于Open类别,则合并所有对象。如何合并对象?我认为.contat()只适用于数组。那么这可能吗?

...
Open
------
const dupObjects = this.props.response.flight['open'];
// returns objects that look like this...
Object {delta: Array[1], lambda: Array[0], amount: }
Object {delta: Array[1], lambda: Array[0], amount: 200,000} // duplicate lets combine
Object {delta: Array[1], lambda: Array[0], amount: 200,000} // duplicate lets combine

if (category == 'Open'){
    // merge objects
    const dupObjects = this.props.response.flight['open'];
}

预期输出:

Open:
Delta : Information...    Lambda: Information...   Amount: $0
Delta : Information...    Lambda: Information...   Amount: $200,000

您所要求的是删除重复的对象,在这些对象中,您使用深度相等将重复定义为具有相同的值。看见http://underscorejs.org/#isEqual下面是一个执行列表重复数据消除的示例脚本。它不是很优雅,但它很有效:

var objects = [
  {"delta":["St.Louis"],"lambda":[],"amount":200000},
  {"delta":["St.Louis"],"lambda":[],"amount":200000},
  {"delta":["Different"],"lambda":[],"amount":200000}
];
var dedupedList = _.reduce(objects, 
 function(result, item) { 
  var isDupe = _.any(result, function(anyItem) { return _.isEqual(item, anyItem); });
  if (!isDupe) result.push(item);
  return result; 
 }, 
 []);
console.log(dedupedList);
<script src="//jashkenas.github.io/underscore/underscore-min.js"></script>