使用 Javascript 的嵌套对象中的唯一对象
Unique Object From Nested Object Using Javascript
我目前的对象如下
{
"payload": [{
"id": "idval1",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
}]
}]
},
{
"id": "idval2",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
},
{
"id": "idval3",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
}]
}]
},
{
"id": "idval4",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
},
{
"id": "idval5",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
},
{
"id": "idval6",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
}]
}]
},
{
"id": "idval7",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
}]
}
下面是我期望当前对象的对象集
{
"payload": [{
"id": "idval1,idval3,idval6",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
}]
}]
},
{
"id": "idval2,idval4,idval5,idval7",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
}]
}
有什么方法可以使用下划线或 JavaScript 来实现。
提前感谢您的帮助。
使用 Lodash,您可以使用 _.uniqWith
提供自定义比较器来寻找唯一性。改变比较器中的第二个参数允许您组合 id
s.
var obj = {"payload":[{"id":"idval1","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"}]}]},{"id":"idval2","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"},{"id":"1236","value":"Three","ddid":"dd3","name":"third value"}]}]},{"id":"idval3","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"}]}]},{"id":"idval4","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"},{"id":"1236","value":"Three","ddid":"dd3","name":"third value"}]}]},{"id":"idval5","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"},{"id":"1236","value":"Three","ddid":"dd3","name":"third value"}]}]},{"id":"idval6","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"}]}]},{"id":"idval7","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"},{"id":"1236","value":"Three","ddid":"dd3","name":"third value"}]}]}]};
obj.payload = _.uniqWith(obj.payload, function(val, accVal) {
if (_.isEqual(val.type, accVal.type)) {
accVal.id += "," + val.id;
return true;
}
return false;
});
console.log(obj);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>
我目前的对象如下
{
"payload": [{
"id": "idval1",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
}]
}]
},
{
"id": "idval2",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
},
{
"id": "idval3",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
}]
}]
},
{
"id": "idval4",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
},
{
"id": "idval5",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
},
{
"id": "idval6",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
}]
}]
},
{
"id": "idval7",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
}]
}
下面是我期望当前对象的对象集
{
"payload": [{
"id": "idval1,idval3,idval6",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
}]
}]
},
{
"id": "idval2,idval4,idval5,idval7",
"type": [{
"lists": [{
"id": "1234",
"value": "One",
"ddid": "dd1",
"name": "first value"
},
{
"id": "1235",
"value": "Two",
"ddid": "dd2",
"name": "second value"
},
{
"id": "1236",
"value": "Three",
"ddid": "dd3",
"name": "third value"
}]
}]
}]
}
有什么方法可以使用下划线或 JavaScript 来实现。
提前感谢您的帮助。
使用 Lodash,您可以使用 _.uniqWith
提供自定义比较器来寻找唯一性。改变比较器中的第二个参数允许您组合 id
s.
var obj = {"payload":[{"id":"idval1","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"}]}]},{"id":"idval2","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"},{"id":"1236","value":"Three","ddid":"dd3","name":"third value"}]}]},{"id":"idval3","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"}]}]},{"id":"idval4","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"},{"id":"1236","value":"Three","ddid":"dd3","name":"third value"}]}]},{"id":"idval5","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"},{"id":"1236","value":"Three","ddid":"dd3","name":"third value"}]}]},{"id":"idval6","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"}]}]},{"id":"idval7","type":[{"lists":[{"id":"1234","value":"One","ddid":"dd1","name":"first value"},{"id":"1235","value":"Two","ddid":"dd2","name":"second value"},{"id":"1236","value":"Three","ddid":"dd3","name":"third value"}]}]}]};
obj.payload = _.uniqWith(obj.payload, function(val, accVal) {
if (_.isEqual(val.type, accVal.type)) {
accVal.id += "," + val.id;
return true;
}
return false;
});
console.log(obj);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>