【问题标题】:How to check for value in javascript object? [duplicate]如何检查javascript对象中的值? [复制]
【发布时间】:2016-04-10 21:31:39
【问题描述】:

我确实有一个包含产品名称和相应产品代码的 javscript 对象。代码是唯一的。

var products = {
"Pineapple":38,
"Apple":110,
"Pear":109
};

如果我想知道产品的代码,我可以做

var pineapplecode = products["Pineapple"];

如何检查是否有给定编号的产品以及是否打印?还是我必须/应该更改数据的保存方式?

【问题讨论】:

  • 给定对象中没有product 的键..
  • 您必须遍历所有属性以查找代码值。您可以有 两个 对象,一个从名称到代码的映射,另一个从代码到名称的映射。

标签: javascript object associative-array


【解决方案1】:

我认为最短的方法是:

var prodCode = 38;
var result = Object.keys(products)
                   .filter(function(k) { return products[k] == prodCode; })[0];

// result == "Pineapple"

MDN

【讨论】:

  • 我认为产品代码应该是唯一的。
  • @NinaScholz,我也这么认为。这就是为什么我只返回[0],假设它是唯一找到的。
  • 但不需要遍历所有元素。
  • @NinaScholz,我想你是对的。这是使用filter() 的缺点(尽管在大多数情况下可以忽略不计)。有一个新的 (ES6) find() 方法可以做到这一点 - 找到第一个匹配并立即返回 (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…)。
  • @haim770 这个答案也在我标记为重复的线程中:stackoverflow.com/questions/9907419/…
【解决方案2】:

我猜你基本上是在问我是否可以反过来检查,即通过传递值来检查键。

是的,你可以,

  • 要么通过遍历所有键和值,检查值是否存在,如果值存在,最后返回键

  • 更改保存数据的方式,按产品编号而不是产品名称对其进行索引

这是将一种形式转换为另一种形式的代码

var newProducts = {};
for( var prodName in products )
{
  newProducts[ products[ prodName ] ] = prodName;
}
console.log( newProducts );

这是检查特定值的代码

var valueToCheck = "110";
var prodNameToFind = "";
for( var prodName in products )
{
  if ( products[ prodName ] == valueToCheck )
  {
      prodNameToFind = prodName;  
  }
}
console.log( prodNameToFind );

【讨论】:

    【解决方案3】:

    只需遍历键和属性值,如果找到 Array.prototype.some() 则中断迭代

    some() 方法测试数组中的某个元素是否通过了提供的函数实现的测试。

    var products = {
            Pineapple: 38,
            Apple: 110,
            Pear: 109
        };
    
    function getProduct(code) {
        var product;
        Object.keys(products).some(function (k) {
            if (products[k] === code) {
                product = k;
                return true;
            }          
        });
        return product;
    }
    document.write(getProduct(109));

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 2018-03-08
      • 2016-07-12
      • 2012-06-05
      • 2010-10-02
      • 2017-08-02
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多