将具有相同值的键相乘
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.entries
和Array.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.. 为什么我会收到此错误? 你给这个函数传递了什么?以上是关于将具有相同值的键相乘的主要内容,如果未能解决你的问题,请参考以下文章