2016-01-06 62 views
1

我有一个包含产品名称和相应产品代码的javscript对象。代码是独一无二的。如何检查javascript对象中的值?

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

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

var pineapplecode = products["Pineapple"]; 

我如何检查是否有一个给定数量的产品,如果打印呢?还是我必须/应该更改数据的保存方式?

+0

有一个在给定的对象没有键'product' .. – Rayon

+2

你会通过寻找代码值的所有属性都循环。你可以有两个*对象,一个从名字到代码的映射,另一个从代码到名字的映射。 – Pointy

回答

0

我想你基本上是问我是否可以检查其他方式,即通过传递值检查密钥。

当然可以,

  • 无论是通过所有键和值迭代,检查值存在,如果该值存在

  • 改变保存方式终于回归的关键按产品数量而不是产品名称

这里的数据,索引是代码以一种形式转化为另一种

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); 
1

我觉得代码中的最短路径将是:

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

// result == "Pineapple" 

MDN

+0

产品代码应该是唯一的,我假设。 –

+0

@NinaScholz,我假设如此。这就是为什么我只返回'[0]',假设它是唯一找到的。 – haim770

+0

,但不需要遍历所有元素。 –

0

只是遍历键属性值并打破迭代,如果找到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));