【问题标题】:Add property from one array with objects to another based on value根据值将一个带有对象的数组中的属性添加到另一个数组
【发布时间】:2020-11-30 18:50:07
【问题描述】:

我有两个这样的对象数组:

let test = [
{Course: "", Week: "1", Hours: ""}, 
{Course: "", Week: "2", Hours: ""}, 
{Course: "", Week: "3", Hours: ""}
]

let values = [{Course: "A", Week: "3", Hours: "1"}]

我想将数组“values”中的属性添加到数组“test”中,结果将是:

let test = [
{Course: "", Week: "1", Hours: ""}, 
{Course: "", Week: "2", Hours: ""}, 
{Course: "", Week: "3", Hours: "1"}
]

这可能吗?我之所以这样,是因为我需要在开始时指定所有星期,并且这些值将从用户那里添加。

【问题讨论】:

  • 为什么课程在输出中没有改变
  • 只更改了一个属性,因此您可以使用 test[2].Hours = values[0].Hours

标签: javascript arrays loops object


【解决方案1】:

首先创建一个对象映射周到对象以便快速查找,然后循环遍历values 数组:

const lookup = {};
for (const val of test) {
    lookup[val.week] = val;
}
for (const val of values) {
    const cur = lookup[val.week];
    for (const key in val) {
        if (key === "Hours") {
            cur[key] = (Number(cur[key]) + Number(val[key])).toString();
        } else {
            cur[key] = val[key];
        }
    }
}

【讨论】:

  • 谢谢!但是,如果我在同一周有两个值?例如。让值 = [{课程:“A”,周:“3”,小时:“1”},{课程:“A”,周:“5”,小时:“1”},{课程:“A” , Week: "5", Hours: "1"}] 那么我猜它不会添加它们
  • 如果您在同一周有多个值,那么您的目标是什么?是要覆盖两者吗?
  • @egx 当两个值具有同一周时,预期的行为是什么?
  • 我的目标是添加相同值的小时数。因此,如果我必须在第 5 周的值中包含 1 小时,我将有 {Course: "A", Week: "5", Hours: "2"}
  • 那将保持不变。所以它只计算基于周的小时数。课程实际上并不那么重要,而是以周为单位的小时价值。
【解决方案2】:

遍历值 - 查找与当前值的周匹配的测试并将小时数设置为值的小时数

values.forEach((value) => {
    //Find the test that matches current value's week and set hours to value's hours
    test.find(test => test.Week === val.Week).Hours = value.Hours);
});

【讨论】:

    【解决方案3】:

    你可以使用 array.find 函数。

    let test = [
        {Course: "", Week: "1", Hours: ""}, 
        {Course: "", Week: "2", Hours: ""}, 
        {Course: "", Week: "3", Hours: ""}
    ]
        
    let values = [{Course: "A", Week: "3", Hours: "1"}]
    
    var current = test.find((item) => {
        return item.Week === values[0].Week
    })
    current.Hours += values[0].Hours;
    
    console.log(test)

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      相关资源
      最近更新 更多