2016-01-06 64 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));