我有以下对象:
我可以根据子阵列收据过滤它吗?
示例:如果配方位置1具有user_id“11111”,则显示整个对象,否则我将删除整个对象
我这样想:
function get() {
var allParkings = Parking.getParkings();
allParkings.$loaded().then(function(data) {
data.forEach(function(value, key) {
console.log(value);
value.receipts.forEach(function(rcpts, key) {
if (rcpts.user_id === user.uid) {
console.log('found');
}
})
})
})
}
修改
对于延迟表示歉意,我使用了所有答案来创建解决方案。
function get() {
var allParkings = Parking.getParkings();
allParkings.$loaded().then(function(data) {
vm.parkings = data;
vm.parkings.forEach(function(value, key) {
value.filteredReceipts = [];
value.receipts.forEach(function(rcpts) {
if (rcpts.user_id === user.uid) {
value.filteredReceipts.push(rcpts);
}
})
})
})
}
答案 0 :(得分:1)
使用内置函数find
,如果找到则返回值,否则为null
。
data.forEach(function(value, key) {
console.log(value);
var found = value.receipts.find(function(rcpts) {
return rcpts.user_id === user.uid;
});
if(found !== null)
// found
// console.log(value); goes here
else
// not found
// delete value; goes here
})
以上代码是filter
的确切用例。所以你可以这样做:
data = data.filter(function(value) {
var found = value.receipts.find(function(rcpts) {
return rcpts.user_id === user.uid;
});
return found !== null;
});
// log the filtered elements
data.forEach( d => console.log(d));
答案 1 :(得分:0)
类似下面的代码。基本上使用delete
运算符在满足条件时删除对象。
var obj = yourObject;
if(obj.receipts && obj.receipts.length > 2){
if(obj.receipts[1].user_id !== "11111"){
delete obj;
}
}
答案 2 :(得分:0)