开发者

Javascript: Filtering twodimensional array

开发者 https://www.devze.com 2023-01-29 23:54 出处:网络
There\'s plenty examples available on how to sort an javascript array based on it\'s numericvalues. What 开发者_开发百科would however be appropriate way to fetch all elements from myArray with the pro

There's plenty examples available on how to sort an javascript array based on it's numeric values. What 开发者_开发百科would however be appropriate way to fetch all elements from myArray with the property prop1 with it's according value value1?

Here's my array:

var myArray = [
{
    "id":"2",
    "name":"My name",
    "properties":{"prop1":"value1"}
}];

Thanks


You can just access it by dot or bracket notation and push the matching members to your new/filtered array, for example:

var newArray = [];
for(var i=0, l = myArray.length; i<l; i++) {
  if(myArray[i].properties.prop1 == "value1") newArray.push(myArray[i]);
}

Your question is a bit ambiguous though, if you're trying to get the {"prop1":"value1"} object, not the parent, then just change newArray.push(myArray[i]) to newArray.push(myArray[i].properties).


Provide a compare function to sort by arbitrary properties:

function compareMyObjects(a, b) {
  var valA = a.properties.prop1.value1;
  var valB = b.properties.prop1.value1;

  if(valA > valB) return 1;
  if(valA < valB) return -1;
  return 0;
}

myArray.sort(compareMyObjects);

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort


Go through each element in your array. For each element, check each property to see if it matches the one you're looking for.

function filterArray(array, property, value) {
    var newArray = [];
    for (var i = 0; i < array.length; i++) {
        for (var j in array[i].properties) {
            if (j === property && array[i].properties.hasOwnProperty(j)) {
                if (array[i].properties[j] == value) {
                    newArray.push(array[i]);
                }
            }
        }
    }
}


var newarray=myarray.filter(function(itm){
   return itm.properties.prop1==='value1';
});

Filter, like the array methods indexOf and map, may be worth providing for browsers that don't have it- this version is from Mozilla Developer Site-

if(!Array.prototype.filter){
    Array.prototype.filter= function(fun, scope){
        var L= this.length, A= [], i= 0, val;
        if(typeof fun== 'function'){
            while(i< L){
                if(i in this){
                    val= this[i];
                    if(fun.call(scope, val, i, this)){
                        A[A.length]= val;
                    }
                }
                ++i;
            }
        }
        return A;
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号