通过键,javascript

时间:2017-03-23 10:01:25

标签: javascript arrays json

我需要按键组合来自json数组的对象键值。

json1 = [
          {key:'xyz', value:['a','b']},
          {key:'pqrs', value:['x','y']}
        ]

json2 = [
          {key:'xyz', value:['c','b']},
          {key:'pqrs', value:['e','f']}
        ]

我需要以下列方式在javascript中组合对象键值

 json3 = [
              {key:'xyz', value:['a','b','c']},
              {key:'pqrs', value:['x','y','e','f']}
            ]

因此,希望按键组合json数组中对象的唯一值。

3 个答案:

答案 0 :(得分:0)

加入数组时所寻找的内容在数学(集合论)中定义为union(参见here)。

关于联盟实施的类似主题已经打开here

答案 1 :(得分:0)

您可以使用forEach()循环添加到数组,使用Set删除对象值的重复项。

var json1 = [{key:'xyz', value:['a','b']},{key:'pqrs', value:['x','y']}]
var json2 = [{key:'xyz', value:['c','b']},{key:'pqrs', value:['e','f']}]

var result = []
json1.concat(json2).forEach(function(e) {
  if(!this[e.key]) this[e.key] = e, result.push(this[e.key])
  else this[e.key].value = [...new Set(this[e.key].value.concat(e.value))]
}, {})

console.log(result)

答案 2 :(得分:0)



function combinedJson(json1, json2) {
	var ret = []
  for (let i = json1.length; i--;) {
  	json2Obj = json2.find(item => item.key === json1[i].key)
  	ret.push({
  		key: json1[i].key,
  		value: json1[i].value.concat(
  			json2Obj ? json2Obj.value : []
  		)
  	})
  }
  return ret
}

json1 = [
  { key: 'xyz', value: ['a', 'b'] },
  { key: 'pqrs', value: ['x', 'y'] }
]

json2 = [
  { key: 'xyz', value: ['c', 'b'] },
  { key: 'pqrs', value: ['e', 'f'] }
]


console.log(combinedJson(json1, json2))