Web 比较两个对象键值,返回最小分母

Web 比较两个对象键值,返回最小分母,web,Web,我是来自Python的NodeJS新手,在这个实践问题上遇到了麻烦 给定两个对象(键、值对)返回它们之间的最小分母 ObjectA = {"A": 10, "B": 20, "C": 30} "Stock" ObjectB = {"A": 5, "B": 10, "C": 1} "Per Item" 函数(objectA,objectB)将返回2,因为objectB可以进入objectA“完全”2次 在我的思想或Python中,我会循环每个键/值来比较这两个对象。不确定如何以性能方式执行此操作

我是来自Python的NodeJS新手,在这个实践问题上遇到了麻烦

给定两个对象(键、值对)返回它们之间的最小分母

ObjectA = {"A": 10, "B": 20, "C": 30} "Stock"
ObjectB = {"A": 5, "B": 10, "C": 1} "Per Item"
函数(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)); 
使用迭代ObjectA,并在每次迭代时将分母指定给当前最低值,如果ObjectB中缺少键,则将分母指定给0:

constobjecta={“A”:10,“B”:20,“C”:30};
常量ObjectB={“A”:5,“B”:10,“C”:1};
常量findBinA=(objectA,objectB)=>Object.keys(objectA)
.reduce((分母,键)=>{
const d=数学地板(objectA[key]/objectB[key])|0;
返回d<分母?d:分母;
},无穷大);

log(findBinA(ObjectA,ObjectB))您可以减少键数,并使用除法的smalles值

var objectA={A:10,B:20,C:30},
objectB={A:5,B:10,C:1},
键=对象。键(objectA),
键=键。减少(功能(a,b){
var aa=Math.floor(objectA[a]/objectB[a]),
bb=数学层(objectA[b]/objectB[b]);
返回aa控制台日志(分母)
您可以使用扩展语法将所有比率传递给
Math.min
,然后截断结果:

var objectA={A:10,B:20,C:30},
objectB={A:5,B:10,C:1},
分母=Math.floor(Math.min(…Object.keys(objectA.map(
key=>objectA[key]/objectB[key])|0;

控制台日志(分母)您是否提前知道两个对象具有完全相同的一组关键点?如果不是,当某个对象缺少一个键时,所需的行为是什么?”将返回2,因为
ObjectB
可以进入
ObjectA
“完全”2次。“完全”的定义是什么?属性
“C”
对象B
比属性
对象a
小30倍,为什么
2
是对对象值求值的预期返回值。提示中没有这方面的内容,但我假设如果缺少一个键,那么它将返回0?因为你不能完成任务requirements@guest271314对不起,我应该澄清一下,因为对象B[A]进入对象A[A]2次,B->2次,c->30次,但由于A/B只进入它两次,它返回两次。它应该用于“像食谱和冰箱”场景,您在末尾发布的代码应该返回0,因为a的第二个值大于第一个值,因此它甚至不能适合一次。我理解正确了吗?我怎样才能像我的大纲一样重构它?函数有多少(params){const{objectA,objectB}=params}var params=returnsOne:{objectA:{“A”:10,“B”:5,“C”:5},objectB:{“A”:20,“B”:10,“C”:5}我遗漏了你大纲的哪一部分?JavaScript语法让我困惑,抱歉,刚才按了enter键。由于您始终有2个参数,因此不需要获取参数列表,然后将其分解为单个变量。请查看我的编辑,看看我做错了什么,我将未定义为返回值,希望得到1个不错的答案。添加一个
| | 0
来处理缺少的密钥。谢谢,我不确定当缺少密钥时返回值应该是什么。在我看来,这是未定义的。当前,此代码返回
NaN
。备选值为0(好像缺少的值默认为
无穷大
),
无穷大
(好像缺少的值默认为0),
未定义
。这完全取决于OP在这个场景中期望得到什么。我使用了这个OP注释——他建议在缺少键时将0作为返回值。啊,我错过了!按照你的建议做。我似乎无法在我的功能下(在我的编辑中)让它工作,但我喜欢你的“一行”解决方案哈哈。学习JS有什么建议吗?从我的反应和能力来看,我似乎已经失去了自我(a:@OriDrori)
module.exports = {
  returnsOne: {
    objectA: {
      a: 10,
      b: 5,
      c: 5
    },
    objectB: {
      a: 20,
      b: 10,
      c: 5
    }
  }
}