繁体   English   中英

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

[英]JSON - Javascript - How to search array item by searching list of values

我有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数组中如果我想根据值搜索项目

如果我给Hello6作为查找字符串,我应该在列表中获得第三项。 我想要通用搜索,而不是搜索每个元素。

您可以尝试以下方法:

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循环。

这是使用本机函数的示例:

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

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

您可以使用过滤器功能:

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;
        }
    }
});

您可以使用好旧的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 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM