2014-07-11 84 views
-1

好了,所以我的JSON是沿着線的東西:JSON得到一個值,如果另一個值

{ 
    "wares":[ 
     { 
     "id":"1", 
     "name":"apples", 
     "stock":"40", 
     }, 
     { 
     "id":"2", 
     "name":"pears", 
     "stock":"40", 
     }, 
     { 
     "id":"3", 
     "name":"bananas", 
     "stock":"30", 
     } 
    ] 
} 

所以我希望得到的名稱,如果股票是40,我用這個代碼作爲例如,我在這裏找到:http://techslides.com/how-to-parse-and-search-json-in-javascript/

function getObjects(obj, key, val) { 
    var objects = []; 
    for (var i in obj) { 
     if (!obj.hasOwnProperty(i)) continue; 
     if (typeof obj[i] == 'object') { 
      objects = objects.concat(getObjects(obj[i], key, val));  
     } else 
     //if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not) 
     if (i == key && obj[i] == val || i == key && val == '') { // 
      objects.push(obj); 
     } else if (obj[i] == val && key == ''){ 
      //only add if the object is not already in the array 
      if (objects.lastIndexOf(obj) == -1){ 
       objects.push(obj); 
      } 
     } 
    } 
    return objects; 
} 

其工作原理,但我還沒有完全找到了一種方法返回的名稱,如果股票是40

我想你把一個額外的價值函數calle d ret(返回)應該返回的內容。東西沿線

alert(JSON.stringify(getObjects(JSON, 'stock', '40', 'name'))); 

非常感謝!

回答

1

使用本地filter()map()方法的一個替代解決方案:

function getObjects(_object, _key, _value, _return) { 
    return _object.filter(function(_item) { 
    return _item[_key] == _value; 
    }).map(function(_item) { 
    return _item[_return]; 
    }); 
} 

注意,在上面的電話,我們需要通過包含項,而不是根對象陣列。 或者你可以修改上面的接受根對象

而你把它想:

getObjects(obj.wares, 'stock', 40, 'name'); 

找回["apples", "pears"]

+0

這是一個非常有用的方法,並且不使用jquery。這也使所有的商品都在一條漂亮的線上而不是幾條,這兩種方法都非常好,而且這一切都歸結於偏好。我也感謝你techfoobar! – user2524703

0

試試看!

$.each(getObjects(JSON, "stock", "40"), function() { 
    alert(this.name); 
}) 

編輯:只是爲了解釋什麼是我寫的,在getObjects函數返回所有符合搜索條件的對象,這樣的話我所做的就是讓那些返回

所有JSONS的每一個名字
+0

這是更簡單的比我預期這將是!令人驚訝的簡單,快速和精美的工作。謝謝! – user2524703

相關問題