我正在为我的对象搜索过滤器。但他只显示了确切的结果:
数组数据:
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;
}
我很想听到你的消息,非常感谢!
答案 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