【问题标题】:How do I create a third object from two objects using the key values如何使用键值从两个对象创建第三个对象
【发布时间】:2020-10-24 18:37:48
【问题描述】:

对象 1:

{positive: ['happy', 'excited', 'joyful'], negative: ['depressed', 'sad', 'unhappy']}

对象 2:

{happy: 6, excited: 1, unhappy: 3}

我想要什么 - 结果:

{positive: 7, negative: 3}

我如何做到这一点?

我已使用以下内容来获取类别对象 2 所属的类别,但我不确定如何随着这些对象的大小增长而动态创建第三个对象。 由于 eslint airbnb 规则,我不能使用 for...of 或 for...in

    function getKeyByValue(value) {
        return Object.keys(object).find((key) => object[key] === value);
    }

【问题讨论】:

  • 从循环开始。
  • 这是作业吗?如果是这样,您尝试过什么?
  • 我已经尝试按值获取键来查找两个属于的类别对象,但我想知道如何动态创建第三个对象。

标签: javascript algorithm sorting object


【解决方案1】:

这可以通过使用Array#reduce 而不是Object.entries 来创建新对象。对于每个条目,destructured 作为[key, feelings],我们使用嵌套的reduce 计算总和:对于feelings 中的每个feeling,我们使用来自object2 的值(如果存在),否则使用0使用short circuit evaluation (object2[feeling] || 0),像这样:

let result = Object.entries(object1).reduce((result, [key, feelings]) => {
  result[key] = feelings.reduce((sum, feeling) => sum + (object2[feeling] || 0), 0);
  return result;
}, {});

演示:

let object1 = { positive: ["happy", "excited", "joyful"], negative: ["depressed", "sad", "unhappy"] };
let object2 = { happy: 6, excited: 1, unhappy: 3 };


let result = Object.entries(object1).reduce((result, [key, feelings]) => {
  result[key] = feelings.reduce((sum, feeling) => sum + (object2[feeling] || 0), 0);
  return result;
}, {});

console.log(result);

【讨论】:

    【解决方案2】:

    例如,您可以使用reduce:

        obj1 = {positive: ['happy', 'excited', 'joyful'], negative: ['depressed', 'sad', 'unhappy']}
        obj2 = {happy: 6, excited: 1, unhappy: 3}
        
        const result ={}
        
        for (let key of Object.keys(obj1)) {
            result[key] = obj1[key].reduce(
                (acc, value) => { return acc + (obj2[value] || 0) }, 0)
        }
        
        console.log(result)

    注意事项:

    1. 在大多数情况下,for ... of Object.keys()for ... in 更可取,因为 for ... in 不仅迭代对象自己的键,而且迭代其原型链。
    2. 您也可以使用 Reflect.ownKeys() 而不是 Object.keys()

    【讨论】:

    • 我尝试过类似的方法,但由于 for of/for in 循环,airbnb eslint 抱怨,所以我试图找出不同的方法
    猜你喜欢
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2022-01-25
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多