将具有相同值的键相乘

Posted

技术标签:

【中文标题】将具有相同值的键相乘【英文标题】: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无关 你已经尝试过什么?请分享一些代码。 【参考方案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.. 为什么我会收到此错误? 你给这个函数传递了什么?

以上是关于将具有相同值的键相乘的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 在两列中查找具有匹配值的行并在另一列中相乘

用openCV将两个图像相乘

Python将包含科学值和浮点值的熊猫数据框与浮点数相乘

Pandas:将依赖于第三列的相同数据框的两列相乘

将两个数据框相乘,基于列并且跳过行不满足条件

两个 pandas MultiIndex 帧将每一行与每一行相乘