2016-07-26 123 views
-1

我现在的目标是如下唯一的对象从嵌套对象使用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实现此目的。

感谢您的帮助提前。

+2

您应该说明的是关于第二个数据集是唯一的。现在,我必须几乎猜到要理解第二个数据集中您想要的内容。 – KevBot

+1

另外,你有没有尝试过吗?就目前而言,您只是要求社区成员为您工作。 – George

回答

0

使用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>

+0

嗨,感谢您的帮助。是否有任何方法来检查**“列表”**,因为我们有一些名为**“ddtype”的类型的其他属性:“cs”**“”type“:[{”ddtype“:”cs“, “列表”:[{“id”:“1234”,“value”:“One”,“ddid”:“dd1”,“name”:“first value”}]}]'。该属性具有不同的值,所以我们无法使用类型。请给我建议。 – Karthikeyan

+0

您可以在问题中编辑输入数据以显示吗?我不确定我明白。这听起来很简单,只需更改'_.isEqual'比较的内容即可。 – 4castle

+0

感谢您的更新。我得到了解决办法。 :) – Karthikeyan