2011-08-26 157 views
3

我有對象的像返回JSON對象

objArray = [{"color":"red", "width":5, "price":10}, 
    {"color":"green", "width":4, "price":8}, 
    {"color":"red", "width":7, "price":11}] 

陣列如何可以返回對象的陣列,其中所述顏色爲紅色以JavaScript或jquery的

+2

迭代並且這些對象添加到新的數組,其中'color'是' 「紅」'。或者是什麼問題? https://developer.mozilla.org/en/JavaScript/Guide/Statements#Loop_Statements(btw。這不是一個JSON對象,它只是一個對象數組)。 –

+0

我說在我的描述中的對象數組... – dardub

+1

那麼你的問題是什麼關於JSON? –

回答

3
var objArray = [{"color":"red", "width":5, "price":10}, 
    {"color":"green", "width":4, "price":8}, 
    {"color":"red", "width":7, "price":11}] 

var tmp = [] 

$.each(objArray,function(i,val){ 
    if(val.color == 'red') 
    { 
     tmp.push(objArray[i]); 
    } 
}); 

console.log(tmp); 
3

如果「返回」,你的意思是從一個函數返回,那麼你可以使用Array.prototype.filter這樣的:

return objArray.filter(function(v) { return v.color === 'red'; }); 

如果你只是想將它保存到一個變量,那麼它只是大致相同:

var red_array = objArray.filter(function(v) { return v.color === 'red'; }); 

爲了彌補舊的瀏覽器,使用the MDN .filter() shim

if (!Array.prototype.filter) { 
    Array.prototype.filter = function (fun /*, thisp */) { 
     "use strict"; 

     if (this === void 0 || this === null) throw new TypeError(); 

     var t = Object(this); 
     var len = t.length >>> 0; 
     if (typeof fun !== "function") throw new TypeError(); 

     var res = []; 
     var thisp = arguments[1]; 
     for (var i = 0; i < len; i++) { 
      if (i in t) { 
       var val = t[i]; // in case fun mutates this 
       if (fun.call(thisp, val, i, t)) res.push(val); 
      } 
     } 

     return res; 
    }; 
} 

或者,如果你想要的jQuery ,請使用$.map()[docs]方法:

var arr = $.map(objArray, function(v) { if(v.color === 'red') return v; }); 

$.grep()[docs]方法:

var arr = $.grep(objArray, function(v) { return v.color === 'red'; }); 

實例:http://jsbin.com/udawir/edit#javascript,live(改變傳遞給$.each()陣列來記錄得到的顏色值)在陣列上