迭代数组并在任何匹配项和额外提供的属性值处收集特定数据

我有一个看起来像这样的数据结构:


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"

  }]

}

我希望能够迭代此数据的list属性并检查列表项的type值是否与另一个提供的值匹配。如果是这样,我想收集max和min值。


如何完成这项任务?我不知道如何解决这个问题。


三国纷争
浏览 79回答 3
3回答

人到中年有点甜

“......我想要特定类型值的所有最大值和最小值,而不是绝对最大值和绝对最小值。有什么办法可以包括这个吗?”可能最自然/最明显的方法是首先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; }

慕妹3146593

在 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'));

慕丝7291255

例如,您可以使用一个简单的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}] */
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript