3 回答
TA贡献1895条经验 获得超7个赞
“......我想要特定类型值的所有最大值和最小值,而不是绝对最大值和绝对最小值。有什么办法可以包括这个吗?”
可能最自然/最明显的方法是首先filter
提供匹配的任何列表项type
......
data2.list.filter(item => item.type === typeToCheckFor)
...并在第二步中map
过滤数组的任何项目...
.map(item => { min: item.min, max: item.max });
另一种方法是reduce
在一个迭代周期内得到结果......
var data2 = {
"name" : "history",
"list": [{
"type" : "a",
"max" : 52.346377,
"min" : 0.1354055,
"date": "17-01-01",
"time": "21:38:17"
}, {
"type" : "b",
"max" : 55.3467377,
"min" : 0.1154055,
"date": "17-01-01",
"time": "22:38:17"
}, {
"type" : "b",
"max" : 48.3467377,
"min" : -0.1354055,
"date": "17-01-01",
"time": "23:38:17"
}]
}
function collectMinMaxValuesOfMatchingType(collector, item) {
if (item.type === collector.type) {
collector.list.push({
//type: item.type,
min: item.min,
max: item.max
})
}
return collector;
}
console.log(
data2.list.reduce(collectMinMaxValuesOfMatchingType, {
type: 'b',
list: []
}).list
);
console.log(
data2.list.reduce(collectMinMaxValuesOfMatchingType, {
type: 'a',
list: []
}).list
);
console.log(
data2.list.reduce(collectMinMaxValuesOfMatchingType, {
type: 'foo',
list: []
}).list
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
TA贡献1820条经验 获得超9个赞
在 data.list 上使用过滤器将只传递那些类型与搜索值相同的对象。然后使用 map 创建具有最小/最大值的新对象。
function filterArray(array, value) {
let result = array.list.filter( obj => obj.type===value).map( filtered => {
return {max: filtered.max, min: filtered.min}
});
return result;
}
var data2 = {
"name" : "history",
"list": [
{
"type" : "a",
"max" : 52.346377,
"min" : 0.1354055,
"date": "17-01-01",
"time": "21:38:17"
},
{
"type" : "b",
"max" : 55.3467377,
"min" : 0.1154055,
"date": "17-01-01",
"time": "22:38:17"
},
{
"type" : "b",
"max" : 48.3467377,
"min" : -0.1354055,
"date": "17-01-01",
"time": "23:38:17"
}
]
}
console.log(filterArray(data2,'b'));
console.log(filterArray(data2,'a'));
console.log(filterArray(data2,'any'));
TA贡献1859条经验 获得超6个赞
例如,您可以使用一个简单的for ... of循环;
let checkType = "a";
let max, min;
for (let entry of data2.list) {
if (entry.type === checkType) {
max = entry.max;
min = entry.min;
break;
}
}
console.log(min, max);
现在让我们注意这将在第一次出现正确的“类型”时停止(如果您有多个相同类型的条目);
如果你想考虑相同“类型”的多个条目,你可以结合 afilter和map迭代,例如:
let checkType = "b";
let minMaxValues = data2.list
.filter(e => e.type === checkType)
.map(e => { min : e.min, max : e.max });
console.log(minMaxValues);
/*
[{
min : 0.1154055,
max : 55.3467377
},
{
min : -0.1354055,
max : 48.3467377
}] */
添加回答
举报