有什么像js中的'lie in'运算符,因为我们在mongoose / mongo中有'$ in'

时间:2013-12-09 15:25:40

标签: javascript arrays

我想在js

中实现这样的功能
            function(arrayOfObjects, arrayOfValues, property) {

/*here i want to return all the objects of 'arrayOfObjects' 
        which satisfies the following condition 
        (index is the iterative index of array 'arrayOfObjects')
               arrayOfObjects[index][property] is equivalent to any of
    the values that lies in arrayOfValues */

            };

示例:

arrayOfObjects = [{ a: 1, b: 2 }, { a: 3, b:4 }, { a: 1, b :3 }];
arrayOfValues = [ 2, 3 ];

function(arrayOfObjects, arrayOfValues, 'b')

return [{ a: 1, b: 2 }, { a: 1, b :3 }]

4 个答案:

答案 0 :(得分:4)

arrayOfObjects.filter(function (elem) {
    return elem.hasOwnProperty(property)
        && -1 !== arrayOfValues.indexOf(elem[property]);
});

如果您需要IE8支持:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter#Compatibility

答案 1 :(得分:0)

您可以使用Array.prototype.filter功能:

var a1 = [{ a: 1, b: 2 }, { a: 3, b:4 }, { a: 1, b :3 }];
var a2 = [2, 3];

var filtered = a1.filter(function(item) {
  return a2.indexOf(item.b) != -1;
});

答案 2 :(得分:0)

不,这在JS中有一些内置运算符或函数是一个太复杂的问题。

你必须使用一些循环来遍历元素。

function(arrayOfObjects, arrayOfValues, property) {
    var result = [];
    for (var i = 0; i < arrayOfObjects; i++) {
        for (var j = 0; j < arrayOfValues; j++) {
            if (arrayOfObjects[i][property] === arrayOfValues[j]) {
                result.push(arrayOfObjects[i]);
                continue; //object already added, go to next one
            }
        }
    }
    return result;
};

答案 3 :(得分:0)

function fun1(arrayOfObjects, arrayOfValues, property) {
    var result = new Array();
    for (var obj in arrayOfObjects){
        if (arrayOfObjects[obj].hasOwnProperty(property) && 
            arrayOfObjects[obj][property] == arrayOfValues[property]){
            result.push(arrayOfObjects[obj]);
        }
    }
    return result;
}

var arrayOfObjects = [{ a: 1, b: 2 }, { a: 3, b:4 }, { a: 1, b :3 }];
var arrayOfValues  = new Array();
arrayOfValues['a'] = 2;
arrayOfValues['b'] = 3;

console.log(fun1(arrayOfObjects , arrayOfValues , 'b'));

您的arrayOfValues应该是一个'关联数组'或键值对对象,它使用键来匹配属性。这可能更适合你的逻辑。