我有这段代码:
var app = {
items: [
[{
title: 'Overview',
id: 'dashboard'
}, {
title: 'Reports',
id: 'reports'
}],
[{
title: 'Customers',
id: 'customers'
}, {
title: 'Quotes',
id: 'quotes'
}, {
title: 'Sales',
id: 'sales'
}],
[{
title: 'Suppliers',
id: 'suppliers'
}, {
title: 'Purchases',
id: 'purchases'
}],
[{
title: 'Bank',
id: 'bank'
}, {
title: 'Projects',
id: 'projects',
disabled: true
}, {
title: 'Journal',
id: 'journal',
disabled: true
}]
]
}
var userDetails = {
IsAdmin: true
};
for (var x = 0; x < app.items.length; x++) {
app.items[x].filter(function (items) {
if (items.disabled || (userDetails.IsAdmin && items.id !== 'quotes')) {
var ind = app.items[x].indexOf(items);
app.items[x].splice(ind, 1);
}
});
}
console.log(app.items);
输出结果是每个数组中有1个对象。这是不可取的,通过我的计算,应该只剩下一个对象(引号对象),
相关的jsFiddle:http://jsfiddle.net/UdzEW/
有什么想法吗?
答案 0 :(得分:3)
.filter
的想法是你提供一个函数,它返回一个布尔值,用于确定值是保留还是继续;它不应该就地修改数组。
var filtered = app.items[x].filter(function (items) {
if (items.disabled || (userDetails.IsAdmin && items.id !== 'quotes')) {
return false;
}
return true;
});
filtered
的内容现在应该包含一个新数组,其中只包含那些内部条件失败的项目。
答案 1 :(得分:0)
试试这个:
for (var x = 0; x < app.items.length; x++) {
app.items[x] = app.items[x].filter(function (items) {
return !(items.disabled || (userDetails.IsAdmin && items.id !== 'quotes'));
});
!app.items[x].length && app.items.splice(x--, 1);
}
它返回带有“Quotes”对象的[[Array(1)]]