【问题标题】:How to get value in object based on another value如何根据另一个值获取对象中的值
【发布时间】:2020-12-28 14:47:31
【问题描述】:

我可以使用一些帮助循环遍历一个对象并获取两种产品之间的价格差异。比如大锤和小锤的价格有什么区别?

这是我目前所拥有的

var myarray = [{product: "big hammer", price: 32},{product: "small hammer", price: 22},{product: "wrench", price: 15},{product: "saw", price: 55}];

getPriceDifference(myarray[0].product);


function getPriceDifference(currentProduct){

   if(currentProduct === "Big Hammer"){

     //do something...this is where I am stuck

   }



}

提前致谢。

【问题讨论】:

  • 您可能应该让您的函数接受两种产品,然后返回差额,否则如何知道将其与哪个价格进行比较?
  • 你的预期输出是什么?
  • @pilchard 这是有道理的。那我怎么去获取两个指定产品的价格呢?这就是我陷入产品名称与价格在同一个对象中的地方。我是新手开发人员,所以没有代码的基本方向会有所帮助。
  • @Prime 预期输出将是两种产品之间的价格差异。例如,大锤子和小锤子的差价是 10 美元,所以函数会返回 10。
  • 我不确定答案到底是什么。据我了解,该函数应该获得两个对象之间差异的值?然后在函数中添加一个参数,就像 otherProduct 一样。像 getPriceDifference(currentProduct, otherProduct)。希望你能找到答案。

标签: javascript for-loop object


【解决方案1】:

有多种迭代数组的方法

myarray.map(item => {

})
myarray.foreach(item => {

})

或者,如果您将数据结构更改为以下内容,则无需迭代。

var products = {
  "big hammer": { price: 32 },
  "small hammer": { price: 22 },
  "wrench": { price: 15 },
  "saw": { price: 55 },
};

function getPriceDifference(product_1, product_2) {
  return Math.abs(products[product_1].price - products[product_2].price);
}

var difference = getPriceDifference("big hammer", "small hammer");
console.log(difference);

【讨论】:

  • 我发现可行的解决方案是您发布的关于更改对象结构的解决方案。一旦我这样做并传递了两个参数,我就能得到正确的输出。谢谢。
  • @user2828701 : opt-in for such data model 'improvement' 是一个非常糟糕的想法 - 想象一下产品名称有 100 个字符长,这对于产品名称来说是很正常的,但是方式对于适当的对象属性名称来说太长了。另一个问题是,当您需要以不同的成本(例如由于折扣)拥有相同名称的项目时,您可能会遇到这种情况,因为对象键名必须是唯一的,因此您将无法实现这一点。对于您来说可能并非如此,但这是一笔纯粹的技术债务,没有任何充分的理由。
  • @Yevgen Gorbunkov 感谢您的提示。我会考虑到这一点,看看我可以如何调整这个解决方案
  • @user2828701 : '>..看看如何..调整'关键是你真的不应该。您的初始数据结构更加健壮(小建议可能为每个项目添加唯一的 id 属性)。我宁愿坚持您在此线程中获得的两种替代解决方案中的任何一种。
【解决方案2】:

这行得通:

var myarray = [{product: "big hammer", price: 32},{product: "small hammer", price: 22},{product: "wrench", price: 15},{product: "saw", price: 55}];

function getPriceDifference(first, second){

   for(var i = 0; i < myarray.length; i++){

   if(myarray[i]['product'] == first) price_first = myarray[i]['price'];
   if(myarray[i]['product'] == second) price_second = myarray[i]['price'];

   }

   return Math.abs(price_first - price_second);
}

console.log(getPriceDifference('small hammer', 'big hammer'));   

【讨论】:

    猜你喜欢
    • 2017-08-03
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多