我有一个我正在通过函数传递的对象。对象如下:
items: {
'cannonball': '0',
'cannon stand': '-9000',
'cannon barrel': '800',
.
.
.
}
我有如下定义的函数filterItem
:
function filterItem(items) {
// console.log(items);
var value = [];
filteredItems = {}
console.log(items);
for (var key in items) {
if (items[key] > 0 && items[key] < 1000) {
value.push(items[key]);
};
};
console.log(value);
};
我正在遍历对象以过滤函数中0
和1000
之间的项目。在函数的最后,我想在名为filteredItems
的对象中显示过滤的键和值。
我该如何实现以获得以下结果?
示例输出:
filteredItems: {
cannon barrel: '800'
}
谢谢。
答案 0 :(得分:4)
如果通过显示,是指console.log对象,则可以对功能进行较小的修改:
let items = {
'cannonball': '0',
'cannon stand': '-9000',
'cannon barrel': '800'
};
function filterItems(items) {
filteredItems = {}
for (var key in items) {
if (items[key] > 0 && items[key] < 1000) {
filteredItems[key] = items[key];
};
}
console.log(filteredItems);
};
filterItems(items);
这将建立具有与原始对象相同的key =>值结构的filteredItems,并且您可以以相同的方式使用它。
答案 1 :(得分:1)
如果我正确理解了您的问题,那么您可以通过以下方法实现这一目标:
var data = {
items: {
"cannonball": '0',
"cannon stand": '-9000',
"cannon barrel": '800',
}
}
function filterItem(items) {
// Use Object.entries to aquire array of key/value pairs
const filteredItems = Object.entries(items)
.filter(([key, value]) => {
// Filter each key/value entry by criteria 0 < value < 1000
return parseInt(value) > 0 && parseInt(value) < 1000;
})
.reduce((result, [key,value]) => {
// Use a reduction to create a hash/object with filtered key/values
result[key] = value;
return result;
}, {})
console.log(filteredItems)
}
filterItem(data.items)
答案 2 :(得分:1)
以下是使用Object.entries
和数组reduce
的版本
var items = {
'cannonball': '0',
'cannon stand': '-9000',
'cannon barrel': '800',
}
function filterItem(items) {
return Object.entries(items).reduce((acc, [key, value]) => {
if (value > 0 && value < 1000) {
acc.push({ [key]: value })
}
return acc;
}, []);
};
console.log(filterItem(items));