js中对数组, var data = [{“name”: “《西游记》”, “author”: “吴承恩”, “cat”: “A级书刊”, “num”: 3},{“name”: “《三国演义》”, “author”: “罗贯中”, “cat”: “A级书刊”, “num”: 8},{“name”: “《红楼梦》”, “author”: “曹雪芹”, “cat”: “B级书刊”, “num”: 10}],如何按照不同的元素进行搜索?
在JavaScript中,我们可以使用数组的 filter()
方法来根据数组元素的特定属性进行搜索。这个方法会创建一个新的数组,新数组的元素是通过检查指定的函数而符合条件的所有元素。
var data = [
{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3},
{"name": "《三国演义》", "author": "罗贯中", "cat": "A级书刊", "num": 8},
{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}
];
var result = data.filter(function(item) {
return item.name === "《西游记》";
});
console.log(result); // 输出:[{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3}]
同样,如果我们想按照 “author” 属性搜索 “曹雪芹”,我们可以这样做:
var result = data.filter(function(item) {
return item.author === "曹雪芹";
});
console.log(result); // 输出:[{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}]
将上面的代码改进为一个封装函数,以便重复使用。这个函数可以接收两个参数:一个是要搜索的数组,另一个是要搜索的值。函数会返回一个新数组,包含所有匹配的元素。
下面是一个示例:
function searchByProperty(array, property, value) {
return array.filter(function(item) {
return item[property] === value;
});
}
// 使用示例:
var data = [
{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3},
{"name": "《三国演义》", "author": "罗贯中", "cat": "A级书刊", "num": 8},
{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}
];
var result = searchByProperty(data, 'name', '《西游记》');
console.log(result); // 输出:[{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3}]
var result2 = searchByProperty(data, 'author', '曹雪芹');
console.log(result2); // 输出:[{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}]
在这个示例中,searchByProperty
函数接受三个参数:array
(要搜索的数组),property
(要搜索的属性名称,如 ‘name’ 或 ‘author’),以及 value
(要搜索的值,如 ‘《西游记》’ 或 ‘曹雪芹’)。
为了支持按多个属性进行搜索,修改一下 searchByProperty
函数,让 property
参数接受一个属性名称的数组,然后在 filter
函数中检查每个属性是否匹配。
下面是一个示例:
function searchByProperties(array, properties, value) {
return array.filter(function(item) {
for (var i = 0; i < properties.length; i++) {
if (item[properties[i]] === value) {
return true;
}
}
return false;
});
}
// 使用示例:
var data = [
{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3},
{"name": "《三国演义》", "author": "罗贯中", "cat": "A级书刊", "num": 8},
{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}
];
var result = searchByProperties(data, ['name', 'author'], '《西游记》');
console.log(result); // 输出:[{"name": "《西游记》", "author": "吴承恩", "cat": "A级书刊", "num": 3}]
var result2 = searchByProperties(data, ['author', 'cat'], '曹雪芹');
console.log(result2); // 输出:[{"name": "《红楼梦》", "author": "曹雪芹", "cat": "B级书刊", "num": 10}]
在这个示例中,searchByProperties
函数接受三个参数:array
(要搜索的数组),properties
(要搜索的属性名称的数组,如 ['name', 'author']
或 ['author', 'cat']
),以及 value
(要搜索的值,如 ‘《西游记》’ 或 ‘曹雪芹’)。函数会返回一个新数组,包含所有在至少一个属性上匹配的元素。
@漏刻有时