如何在具有相似相似值但有区别的数组中循环赋值?

问题描述 投票:0回答:2
var items =[
  {ID:1,day:'mon',val1:10,val2:20,val3:10},
  {ID:2,day:'mon',val1:11,val2:70,val3:55},
  {ID:3,day:'mon',val1:15,val2:27,val3:37},
  {ID:4,day:'teu',val1:9,val2:17,val3:11}
]

var workDays = ['mon','teu']

我需要遍历上面的项目数组。并以以下形式将数据追加到其他位置:

-循环块开始-

Day:// from workDays   
Values:// from item array  

-循环块结束---

最终结果应该类似于

  Day:'mon'   
  Values:10,20,10...(display all values corresponding to 'mon' in item array

我该怎么办?

javascript arrays node.js json
2个回答
0
投票

您可以使用ES6解构并轻松实现所需的目标:

var items = [{
    ID: 1,
    day: 'mon',
    val1: 10,
    val2: 20,
    val3: 10
  },

  {
    ID: 2,
    day: 'mon',
    val1: 11,
    val2: 70,
    val3: 55
  }, {
    ID: 3,
    day: 'mon',
    val1: 15,
    val2: 27,
    val3: 37
  }, {
    ID: 4,
    day: 'teu',
    val1: 9,
    val2: 17,
    val3: 11
  }
]

var workDays = ['mon', 'teu']

const result = workDays.map(day => {
  const dayItems = items.filter(item => item.day === day);
  const values = dayItems.reduce((a, {
    val1,
    val2,
    val3
  }) => [...a, val1, val2, val3], []);

  return {
    Day: day,
    Values: values,
  };
});

console.log(result);

0
投票

您可以使用mapfilterflat来实现。像这样的东西

const items = [
  {"ID": 1, "day": "mon", "val1": 10, "val2": 20, "val3": 10},
  {"ID": 2, "day": "mon", "val1": 11, "val2": 70, "val3": 55},
  {"ID": 3, "day": "mon", "val1": 15, "val2": 27, "val3": 37},
  {"ID": 4, "day": "teu", "val1": 9, "val2": 17, "val3": 11}
];

const workDays = ["mon", "teu"];

const result = workDays.map(day => {
  return {
    "Day": day,
    "values": items.filter(item => item.day === day).map(i => {
      return [i.val1, i.val2, i.val3];
    }).flat()
  };
});

console.log(result);
© www.soinside.com 2019 - 2024. All rights reserved.