2014-02-14 3 views
3

У меня есть коллекции, как это:фильтр следующие JSON с помощью подчеркивания

var collection={ 
    "Today": [{ 
    "id": "1", 
    "name": "iPod Nano", 
    "image": "img/items/item1.jpg", 
    "special": 0 
}, { 
    "id": "2", 
    "name": "Samsung TV", 
    "image": "img/items/item2.jpg", 
    "special": 1 
}], 
"Monday 11 August 2014": [{ 
    "id": "3", 
    "name": "Nikon Camera", 
    "image": "img/items/item3.jpg", 
    "special": 0 

}, { 
    "id": "4", 
    "name": "iPad 1000", 
    "image": "img/items/item4.jpg", 
    "special": 0 

}], 

"Monday 30 August 2014 ": [{ 

    "id": "5", 

    "name": "ar of Gold", 
    "mage": "img/items/item5.jpg ", 
    "special ": 1 

}, { 
    "id ": "6 ", 
    " name ": "Buzz Light Year ", 
    "image ": " img/items/item6.jpg ", 
    "special ": 1 

}] 

}; 

я хотел бы, чтобы отфильтровать коллекцию и остаются только специальные == 1:

Я пробовал:

var Specials=_.reduce(collection,function(memo,item){ 
       var result = _.filter(item,function(c){ 
        return c.special==0 ; 
       }); 
       if(result.length > 0){ 
        var newResult = {}; 
        newResult.deals = result; 
        newResult.id = item.id; 
        memo = _.union(memo,newResult); 
       } 
       return memo; 
      },[]); 
      var jsonText=JSON.stringify(Specials); 

      console.log("=========>" + jsonText); 

Но не получил то, что я ожидал.

Почему? Я хотел бы результат такой:

var filtered={ 
"Today": [{ 
    "id": "2", 
    "name": "Samsung TV", 
    "image": "img/items/item2.jpg", 
    "special": 1 
}], 

"Monday 30 August 2014 ": [{ 

    "id": "5", 

    "name": "ar of Gold", 
    "mage": "img/items/item5.jpg ", 
    "special ": 1 

}, { 
    "id ": "6 ", 
    " name ": "Buzz Light Year ", 
    "image ": " img/items/item6.jpg ", 
    "special ": 1 

}] 

}; 
+1

Ваш JSON не является действительным) –

+0

Вы говорите, что вы хотите фильтровать 'c.special == 1', но ваш код фильтрации на' c.special == 0 '... какой из них верный? –

ответ

2

Как я помню сократить имеет немного другую функциональность,

Вы можете использовать каждый + отклонить, если вам нужно сохранить тот же JSON st ructure fiddle

_.each(collection, function(items, key){ 

    var filtered = _.reject(items, function(item){ 
     return item.special < 1 
    }); 

    if(filtered.length){ 
     specials[key] = filtered; 
    } 
}); 
+0

что делать, если я сохраню только ту дату, которая содержит специальные предложения. и удалите все другие теги даты, которые не имеют каких-либо специальностей. – JavaScripter

+0

Я обновляю код в скрипке. или вы можете использовать код, предоставленный @undefined – Evgeniy

+0

Привет, Это именно то, что я ожидал. Благодарю. Я научился генерировать новые JSON-данные по вашему коду. – JavaScripter

1

Вы можете попробовать этим:

var collection = { 
    "Today": [ 
    { 
    "id": "1", 
    "name": "iPod Nano", 
    "image": "img/items/item1.jpg", 
    "special": 0 
    }, 
    { 
    "id": "2", 
    "name": "Samsung TV", 
    "image": "img/items/item2.jpg", 
    "special": 1 
    } 
], 

"Monday 11 August 2014": [ 
    { 
    "id": "3", 
    "name": "Nikon Camera", 
    "image": "img/items/item3.jpg", 
    "special": 0 
    }, 
    { 
    "id": "4", 
    "name": "iPad 1000", 
    "image": "img/items/item4.jpg", 
    "special": 0 
    } 
] 

};

for(var i in collection){ 
    collection[i] = _.filter(collection[i], function(item){ 
    return item.special == 0; 
    }); 
} 
console.log(collection); 

Результаты будут сгруппированы по дням, если вы хотите объединить вы должны написать это

var res = []; 
for(var j in collection){ 
    for(var i = 0; i < collection[j].length; i++) 
    res.push(collection[j][i]); 
} 

console.log(res); 

И demo

+0

вот что я получил: { "Сегодня": [], "Понедельник 11 августа 2014": [], "Понедельник 30 августа 2014": [] } – JavaScripter

+0

функция Filter возвращает пустой массив, если теперь требуется объекты , –

+0

Спасибо. FUserThrowError – JavaScripter

Смежные вопросы