我是来自Python的NodeJS的新手,并且遇到了这个练习问题。
给定两个对象(键,值对)返回它们之间的最小分母。
ObjectA = {"A": 10, "B": 20, "C": 30} "Stock"
ObjectB = {"A": 5, "B": 10, "C": 1} "Per Item"
function(objectA, objectB)
会返回2,因为ObjectB
可以完全“进入ObjectA
2次”。
在我的脑海中或Python中,我想循环每个键/值比较两个对象。如果键值出现故障,不确定如何以性能方式执行此操作/处理它。
不确定如何在JavaScript中迭代这些对象,我是否必须独立调用每个孩子?我如何索引它们?
main.js:
function howMany(params) {
const {objectA, objectB} = params
Object.keys(objectA).reduce((denominator, key) => {
if(objectB[key] === undefined) {
return 0;
}
const d = Math.floor(objectA[key] / objectB[key]);
return d < denominator ? d : denominator;
}, Infinity);
}
module.exports = {howMany}
var params = require('./inputs.js');
howMany(params.returnsOne);
console.log(howMany(params.returnsOne));
inputs.js:
module.exports = {
returnsOne: {
objectA: {
a: 10,
b: 5,
c: 5
},
objectB: {
a: 20,
b: 10,
c: 5
}
}
}
答案 0 :(得分:1)
您可以使用展开语法将所有比率传递给Math.min
,然后截断结果:
var objectA = { A: 10, B: 20, C: 30 },
objectB = { A: 5, B: 10, C: 1 },
denominator = Math.floor(Math.min(...Object.keys(objectA).map(
key => objectA[key] / objectB[key] ))) || 0;
console.log(denominator);
&#13;
与您拥有的内容更加完整:
function howMany({objectA, objectB}) {
return Math.floor(Math.min(...Object.keys(objectA).map(
key => objectA[key] / objectB[key] ))) || 0;
}
const params = {
returnsOne: {
objectA: { A: 10, B: 20, C: 30 },
objectB: { A: 5, B: 10, C: 1 }
}
};
console.log(howMany(params.returnsOne));
&#13;
答案 1 :(得分:0)
使用Object#keys迭代ObjectA的Array#reduce,并在每次迭代时将分母指定为当前最低值,如果在ObjectB中缺少键,则为0:
const ObjectA = {"A": 10, "B": 20, "C": 30};
const ObjectB = {"A": 5, "B": 10, "C": 1};
const findBinA = (objectA, objectB) => Object.keys(objectA)
.reduce((denominator, key) => {
const d = Math.floor(objectA[key] / objectB[key]) || 0;
return d < denominator ? d : denominator;
}, Infinity);
console.log(findBinA(ObjectA, ObjectB));
&#13;
答案 2 :(得分:0)
您可以减少键并使用具有该分区的较小值的键。
var objectA = { A: 10, B: 20, C: 30 },
objectB = { A: 5, B: 10, C: 1 },
keys = Object.keys(objectA),
key = keys.reduce(function (a, b) {
var aa = Math.floor(objectA[a] / objectB[a]),
bb = Math.floor(objectA[b] / objectB[b]);
return aa < bb ? a : b;
}),
denominator = Math.floor(objectA[key] / objectB[key]);
console.log(denominator);