Typeof仅显示确切的结果

时间:2017-09-01 07:59:20

标签: javascript jquery

我正在为我的对象搜索过滤器。但他只显示了确切的结果:

数组数据:

name => 'foo',
name => 'fa',
name => 'bar',

我的意思是:

getObjects(array, 'name', 'foo');

如果我搜索' f'我一无所获。当我搜索' foo'我得到了#foo'。我想要的是,如果我搜索f' f,我想要' foo'和' fa'。

代码

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] === 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i == key && obj[key] == val) {
            objects.push(obj);
        }
    }
    return objects;
}

我很想听到你的消息,非常感谢!

4 个答案:

答案 0 :(得分:1)

var a = 'blabla';
alert(a.includes('la'))

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] === 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i.includes(key) && obj[key].includes(val)) {
            objects.push(obj);
        }
    }
    return objects;
}

答案 1 :(得分:1)

您可以使用String#indexOf,也可以使用ES6 String#includes

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] === 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i.indexOf(key) !== -1 && obj[key].indexOf(val) !== -1) {
            objects.push(obj);
        }
    }
    return objects;
}

var array = [{ name: 'foo' }, { name: 'fa' }, { name: 'bar' }];
    
console.log(getObjects(array, 'name', 'f'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:1)

让这个很多更简单。

如果我正确阅读了这个问题,那就是你的数据:

var array = [{name: 'foo'},{name: 'fa'},{name: 'bar'}];

然后,获取特定键包含特定值的所有项目的工作并不多:



var array = [{name: 'foo'},{name: 'fa'},{name: 'bar'}];

function getObjects(array, key, value) {
    return array.filter(function(item) { // I only want items that...
        return item[key] &&              // Have the current key
            item[key].includes(value);   // And it contains the value I'm looking for.
    });
}

console.log(getObjects(array, 'name', 'foo'));
console.log(getObjects(array, 'name', 'a'));
console.log(getObjects(array, 'name', 'f'));
console.log(getObjects(array, 'baz', 'woo')); // No results for bad key.




请注意,您可以使用item.hasOwnproperty(key) &&代替item[key] &&,如果您需要担心的话。

答案 3 :(得分:0)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div>A beautiful badsentence</div>

你可以使用

i == key && obj[key] == val