Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在数组中过滤不同的键并在数组中获得唯一的结果_Javascript_Angularjs_Arrays - Fatal编程技术网

Javascript 如何在数组中过滤不同的键并在数组中获得唯一的结果

Javascript 如何在数组中过滤不同的键并在数组中获得唯一的结果,javascript,angularjs,arrays,Javascript,Angularjs,Arrays,我试图从响应中筛选数据,删除重复项并将数据推送到数组中,我的api响应如下: { "_id":"0", "yacht_id":"200", "promo_id":"300", "blocked_thru":"promotions", "dates":"2017-08-23T00:00:00.000Z", }, { "_id":"1", "booking_id":{ "_id":"100", "booking_id":"BK16

我试图从响应中筛选数据,删除重复项并将数据推送到数组中,我的api响应如下:

{
   "_id":"0",
   "yacht_id":"200",
   "promo_id":"300",
   "blocked_thru":"promotions",
   "dates":"2017-08-23T00:00:00.000Z",
},
{
  "_id":"1",
  "booking_id":{
        "_id":"100",
        "booking_id":"BK163041494",
               },
  "blocked_thru":"booked",
  "dates":"2017-08-30T00:00:00.000Z",
 },
 {
   "_id":"2",
   "booking_id":{
        "_id":"100",
        "booking_id":"BK163041494",
                 },
    "blocked_thru":"booked",
    "dates":"2017-08-30T00:00:00.000Z",
 }
{
   "_id":"0",
   "yacht_id":"200",
   "promo_id":"300",
   "blocked_thru":"promotions",
   "dates":"2017-08-23T00:00:00.000Z",
},
{
  "_id":"1",
  "booking_id":{
        "_id":"100",
        "booking_id":"BK163041494",
               },
  "blocked_thru":"booked",
  "dates":"2017-08-30T00:00:00.000Z",
 },
从上面的响应中,如果对象中存在“booking\u id”,并且“booking\u id.\u id”相同,那么我需要过滤并将唯一的对象推送到数组中

我需要以下答复:

{
   "_id":"0",
   "yacht_id":"200",
   "promo_id":"300",
   "blocked_thru":"promotions",
   "dates":"2017-08-23T00:00:00.000Z",
},
{
  "_id":"1",
  "booking_id":{
        "_id":"100",
        "booking_id":"BK163041494",
               },
  "blocked_thru":"booked",
  "dates":"2017-08-30T00:00:00.000Z",
 },
 {
   "_id":"2",
   "booking_id":{
        "_id":"100",
        "booking_id":"BK163041494",
                 },
    "blocked_thru":"booked",
    "dates":"2017-08-30T00:00:00.000Z",
 }
{
   "_id":"0",
   "yacht_id":"200",
   "promo_id":"300",
   "blocked_thru":"promotions",
   "dates":"2017-08-23T00:00:00.000Z",
},
{
  "_id":"1",
  "booking_id":{
        "_id":"100",
        "booking_id":"BK163041494",
               },
  "blocked_thru":"booked",
  "dates":"2017-08-30T00:00:00.000Z",
 },
任何帮助都将不胜感激。谢谢。

使用和
哈希表来挑选独特的元素-请参阅下面的演示:

var object=[{u id:“0”,“游艇id:“200”,“促销id:“300”,“阻止通过”:“促销”,“日期”:“2017-08-23T00:00:00.000Z”,“1”,“预订id:{u id:“100”,“预订id:“BK163041494”,“阻止通过”:“预订”,“日期”:“2017-08-30T00:00:00.000Z”,“阻止通过”:“2”,“预订id:“100”,“阻止通过预订”:“BK16414”,“阻止通过”:,“日期”:“2017-08-30T00:00:00.000Z”,}];
var result=object.reduce(函数(散列){
返回函数(p,c){
if(!c.booking_id | |(c.booking_id&&!hash[c.booking_id.booking_id])){
如果(c.预订号)
hash[c.booking\u id.booking\u id]=true;
p、 推(c);
}
返回p;
};
}(Object.create(null)),[]);
console.log(结果);

.as console wrapper{top:0;max height:100%!important;}
您可以使用对象作为映射,每个
booking\u id只能保存一个对象。对于具有以下字段的对象:

var objs=[{u id:“0”,游艇id:“200”,促销id:“300”,阻止通过:“促销”,日期:“2017-08-23T00:00:00.000Z”},{u id:“1”,预订id:{u id:“100”,预订id:“BK163041494”},阻止通过:“预订”,日期:“2017-08-30T00:00:00.000Z”},{u id:“2”,预订id:{u id:“100”,预订id:“BK163041494:00:00”,阻止通过日期:“2017-08-30T00:00:00”;
var uniqueObjs=[];
var bookingObjsMap={};
objs.forEach((obj)=>{
if(目标预订号){
bookingObjsMap[obj.booking_id.\u id]=obj;
}
否则{
单向推送(obj);
}
});
uniqueObjs=uniqueObjs.concat(Object.values(bookingObjsMap));
console.log(uniqueObjs)
您可以使用
数组#reduce
数组#一些

var response=[{u id:“0”,“游艇id:“200”,“促销id:“300”,“阻止通过”:“促销”,“日期”:“2017-08-23T00:00:00.000Z”,},{u id:“1”,“预订id:“100”,“预订id:“BK163041494”,},“阻止通过”:“预订”,“日期”:“2017-08-30T00:00:00.000Z”,},{,{,{u id:“2”,“预订id:“100”,“阻止通过”,{日期:“2017-08-30T00:00:00.000Z”,}];
var unique=响应。减少((res,obj)=>{
让isFound=res.some(o=>
o['booking\u id']和&o['booking\u id']['u id']==obj['booking\u id']['u id']);
如果(!isFound){
res.push(obj);
}
返回res;
}, []);

console.log(唯一);
数据表如下==>

var dataTable = [{
    "_id": "0", "yacht_id": "200",
    "promo_id": "300", "blocked_thru": "promotions", "dates": "2017-08-23T00:00:00.000Z"
}, {
    "_id": "1", "booking_id": {
        "_id": "100", "booking_id": "BK163041494"
    },
    "blocked_thru": "booked", "dates": "2017-08-30T00:00:00.000Z"
}, {
    "_id": "2", "booking_id": {
        "_id": "100", "booking_id": "BK163041494"
    },
    "blocked_thru": "booked", "dates": "2017-08-30T00:00:00.000Z"
}];
创建一个如下所示的方法,该方法返回您唯一的行==>

函数getUniqueRows(数据){ 让uniqueRows=[];让book=[]; for(设i=0,l=data.length;ia==obj.booking\u id.\u id)!==未定义) 继续; 单向推力(obj); 预订推送(obj.预订id.\U id); } 返回uniqueRows; };

并使用
var myUniqueRows=getUniqueRows(dataTable);

到目前为止您做了什么?请添加您的代码,而不仅仅是您的JSONI如果您想要一个简单的解决方案,您可以使用:u.uniqWith(objects,u.isEqual);@user3492940非常感谢,它对我很有用。