在JavaScript中,对象是一种无序的键值对集合。对象的键(key)通常是字符串,而值(value)可以是任何数据类型,包括其他对象、数组、函数等。获取对象中特定键的值是常见的操作。
{}
定义的对象。new
关键字和构造函数创建的对象。Math
、Date
、Array
等。假设我们有一个对象,我们想要获取所有键以特定字符串开头的值。我们可以使用 for...in
循环或 Object.keys()
方法结合数组过滤来实现。
const obj = {
'apple': 1,
'apricot': 2,
'banana': 3,
'avocado': 4
};
function getValuesStartingWith(obj, prefix) {
return Object.keys(obj)
.filter(key => key.startsWith(prefix))
.map(key => obj[key]);
}
const values = getValuesStartingWith(obj, 'ap');
console.log(values); // 输出: [1, 2]
Object.keys(obj)
:获取对象的所有键,返回一个数组。.filter(key => key.startsWith(prefix))
:过滤出以指定前缀开头的键。.map(key => obj[key])
:根据过滤后的键,获取对应的值。for...in
循环时可能会得到意外的结果?原因:for...in
循环会遍历对象的所有可枚举属性,包括原型链上的属性。
解决方法:使用 hasOwnProperty
方法来检查属性是否是对象自身的属性。
function getValuesStartingWith(obj, prefix) {
const result = [];
for (const key in obj) {
if (obj.hasOwnProperty(key) && key.startsWith(prefix)) {
result.push(obj[key]);
}
}
return result;
}
Object.keys()
和 Array.prototype.filter()
结合使用时性能较好?原因:Object.keys()
返回的是一个数组,数组的 filter()
和 map()
方法都是经过优化的,性能较好。
解决方法:继续使用这种组合方式来获取特定前缀的键值对。
通过以上方法,你可以有效地获取对象中以特定字符串开头的键对应的值。
领取专属 10元无门槛券
手把手带您无忧上云