【问题标题】:Multiply keys with the same value将具有相同值的键相乘
【发布时间】:2019-07-09 17:16:18
【问题描述】:

我有这个对象:

obj = {1: 2, 4: 1, 5: 2};

如何在其他自变量上找到并仅乘以值为 2 的键? 在这种情况下,我想将 1*2 与 5*2 进行比较。

var1 = 1*2;
var2 = 5*2;

谢谢!

【问题讨论】:

  • 这个问题与基于当前内容的angular/typescript无关
  • 你已经尝试过什么?请分享一些代码。

标签: javascript typescript


【解决方案1】:
const obj = {1: 2, 4: 1, 5: 2};
const arr = Object.keys(obj).reduce((sum, key) => {
  if(obj[key] === 2) sum.push(Number(key) * 2) ;
  return sum;
}, []);
console.log(arr);

那么arr就是你想要的([2, 10]

【讨论】:

  • 谢谢。为什么我收到此错误:算术运算的左侧必须是“any”、“number”、“bigint”或枚举类型。 ?
【解决方案2】:

我会使用Object.entriesArray.prototype.reduce 遍历您的对象。

Object.entries 返回一个键/值对数组:

Object.entries({1: 2, 4: 1, 5: 2});
//=> [["1",2],["4",1],["5",2]]

使用Array.prototype.reduce,您可以返回值等于2 的键/值对的产品数组:

Object.entries({1: 2, 4: 1, 5: 2}).reduce((acc, [k, v]) =>
    v === 2 ? acc.concat(k * v) : acc, []);

现在让我们创建一个函数,它接受 1)要查找的值和 2)键/值对对象:

const multKeys = (value, obj) =>
  Object.entries(obj).reduce((acc, [k, v]) =>
    v === value ? acc.concat(k * v) : acc, []);
    
    
console.log(multKeys(2, {1: 2, 4: 1, 5: 2}));

然后您可以通过destructuring assignment将每个产品分配给变量

var [var1, var2] = multKeys(2, {1: 2, 4: 1, 5: 2});
var1; //=> 2
var2; //=> 10

【讨论】:

    【解决方案3】:

    这很容易,即使我真的不明白你为什么要做这样的事情..

    obj = {1: 2, 4: 1, 5: 2};
    Object.keys(obj).forEach(k => {
      if(k == 2 || obj[k] == 2) console.log(k * obj[k]); 
    })

    【讨论】:

    • 这是一个有五个骰子的游戏。如果我有两对,我想比较它们,以便提取最大的一对。
    • 我收到您的代码有两个错误:此条件将始终返回 'false',因为类型 'string' 和 'number' 没有重叠。和 算术运算的左侧必须是“any”、“number”、“bigint”或枚举类型。不过还是谢谢你:)
    • 我猜你已经用别的东西测试了它,因为你可以通过按“运行代码片段”它工作:)))
    • 是的,确实如此。使用 WebStorm.. 为什么我会收到此错误?
    • 你给这个函数传递了什么?
    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多