JSON - Javascript - 如何通过搜索值列表来搜索数组项

时间:2014-01-31 15:39:24

标签: javascript arrays json

我有json数组如下

[
    {
        French: 'Hello',
        Spanish: 'Hello1',
        english:'Hello2'
    },{
        French: 'Hello3',
        Spanish: 'Hello4',
        english:'Hello5'
    },{
        French: 'Hello6',
        Spanish: 'Hello7',
        english:'Hello8'
    },{
        French: 'Hello9',
        Spanish: 'Hello10',
        english:'Hello81'
    }
];

在Javascript数组中如果我想根据值

搜索项目

ex如果我将Hello6作为查找字符串,我应该在列表中获得第3项。我希望通用搜索而不是搜索每个元素。

4 个答案:

答案 0 :(得分:2)

你可以试试这个:

function findIndex(arr, str) {
    for (var i = 0; i < arr.length; i++) {
        for (var key in arr[i]) {
            if (arr[i][key] === str) {
                if (arr[i].hasOwnProperty(key) {
                    return arr[i];
                }
            }
        }
    }
    return null;
}

此方法包含一个带有正常for循环的数组搜索,然后,对于此数组的每个元素,我们执行for..in循环。

答案 1 :(得分:1)

以下是使用本机函数的示例:

var items = [/*your sample*/];
var myValue = "Hello6";

var result = items.filter(function (item) { 
    return Object.keys(item).some(function (property) { 
        return item[property] === myValue; 
    });
});

答案 2 :(得分:0)

你可以使用过滤功能:

var val = "Hello6";
//if you want to filter the array
resultArray = jsonArray.filter(function(obj, index){
    for(var key in obj){
        if(obj[key]==val) return obj;
    }
});

var indexes=[];
//if you want to find the results
jsonArray.forEach(function(obj, index){
    for(var key in obj){
        if(obj[key]==val){
            indexes.push(index);
            break;
        }
    }
});

答案 3 :(得分:0)

您可以使用旧的for循环:

function find(array, fn) {
    for (var i = 0, l = array.length; i < l; i++) {
        if (fn(array[i]) === true) return array[i];
    }
}

用法示例:

var a = [{ a: 1 }, { a: 2 }, { a: 3 }];
var result = find(a, function (item) {
    return item.a === 2;
});
result; // { a: 2 }

使用更复杂的数组:

var a = [
    { a: 1, b: 2 }, 
    { a: 3, b: 4 }, 
    { a: 5, b: 6 }
];
var result = find(a, function (item) {
    for (var k in item) {
        if (item[k] === 4) return true;
    }
});
result; // { a: 3, b: 4 }