Javascript 从对象键返回元素数组
给定一个对象和一个键,我创建了一个函数,该函数返回一个数组,该数组包含位于给定键的数组中等于10的所有元素 如果数组为空,则应返回空数组;如果数组不包含等于10的元素,则应返回空数组;如果给定键处的属性不是数组,则应返回空数组Javascript 从对象键返回元素数组,javascript,arrays,Javascript,Arrays,给定一个对象和一个键,我创建了一个函数,该函数返回一个数组,该数组包含位于给定键的数组中等于10的所有元素 如果数组为空,则应返回空数组;如果数组不包含等于10的元素,则应返回空数组;如果给定键处的属性不是数组,则应返回空数组 function getElementsThatEqual10AtProperty(obj, key) { for(var prop in obj){ if(obj[prop] === 10){ return obj[key]; } }
function getElementsThatEqual10AtProperty(obj, key) {
for(var prop in obj){
if(obj[prop] === 10){
return obj[key];
}
}
}
var obj = {
key: [1000, 10, 50, 10]
};
var output = getElementsThatEqual10AtProperty(obj, 'key');
console.log(output); // --> IT MUST RETURN [10, 10]
知道我做错了什么吗?在代码中,您正在迭代对象中的所有属性
for(var prop in obj)
因此,道具将在第一次迭代的“关键点”中。然后你问doesobj['key']==10
这不是您要进行的检查,因为这基本上是[1000,10,50,10]==10
然后,您可以创建数组,查找与您的条件匹配的所有项,即它是否等于10
您可以更进一步,因为您知道要查找的键,当您将它传递到函数中时,您不必迭代对象,您可以直接转到它:
obj[key]
但是,正如您所说,如果不匹配,您希望返回一个空数组,因此您可以使用:
var array = (obj[key] || [])
这基本上意味着,如果obj[key]不存在,那么只需使用[]
将整个过程结合起来看起来像:
函数foobar(对象,键){
返回(对象[键]| |[])。过滤器(函数(项){
退货项目===10;
});
}
变量对象={
唯一:[1,10,100,10],
无:[1,2,3,4,5]
}
console.log(foobar(对象,'unique'));//返回[10,10]
console.log(foobar(对象'asgasgag'));//返回[]
log(foobar(对象“nothing”);//返回[]
在代码中,您正在迭代对象中的所有属性
for(var prop in obj)
因此,道具将在第一次迭代的“关键点”中。然后你问doesobj['key']==10
这不是您要进行的检查,因为这基本上是[1000,10,50,10]==10
然后,您可以创建数组,查找与您的条件匹配的所有项,即它是否等于10
您可以更进一步,因为您知道要查找的键,当您将它传递到函数中时,您不必迭代对象,您可以直接转到它:
obj[key]
但是,正如您所说,如果不匹配,您希望返回一个空数组,因此您可以使用:
var array = (obj[key] || [])
这基本上意味着,如果obj[key]不存在,那么只需使用[]
将整个过程结合起来看起来像:
函数foobar(对象,键){
返回(对象[键]| |[])。过滤器(函数(项){
退货项目===10;
});
}
变量对象={
唯一:[1,10,100,10],
无:[1,2,3,4,5]
}
console.log(foobar(对象,'unique'));//返回[10,10]
console.log(foobar(对象'asgasgag'));//返回[]
log(foobar(对象“nothing”);//返回[]
obj['key']
是一个数组。。。所以它永远不可能等于10
。您还需要过滤该数组
你能用这个吗
函数getElementsThatEqual10AtProperty(obj,key){
var arr=obj[key]| |[];
返回arr.filter(函数(val){
返回值===10;
});
}
var obj={
钥匙:[1000,10,50,10]
};
var输出=getElementsThatEqual10AtProperty(obj,'键');
console.log(输出);//-->它必须返回[10,10]
obj['key']
是一个数组。。。所以它永远不可能等于10
。您还需要过滤该数组
你能用这个吗
函数getElementsThatEqual10AtProperty(obj,key){
var arr=obj[key]| |[];
返回arr.filter(函数(val){
返回值===10;
});
}
var obj={
钥匙:[1000,10,50,10]
};
var输出=getElementsThatEqual10AtProperty(obj,'键');
console.log(输出);//-->它必须返回[10,10]
如果我理解正确,您需要检查obj
的属性键是否是数组,如果是,则返回等于10的所有元素
因为您已经有了属性的名称,所以不需要迭代。只需直接访问键
属性,并检查其类型是否为数组
。然后,需要过滤数组
下面是一个代码示例(不是最好的,但用于学习):
如果我理解正确,您需要检查obj
的属性key
是否为数组,如果是,则返回等于10的所有元素
因为您已经有了属性的名称,所以不需要迭代。只需直接访问键
属性,并检查其类型是否为数组
。然后,需要过滤数组
下面是一个代码示例(不是最好的,但用于学习):
这可以通过使用过滤器实现
该方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素
我在下面的解决方案中使用了ES6
arrow语法,使其更加简洁。您还可以直接在数组上调用.filter()
,并显式提供谓词(item==10),而不是为动态提供的谓词创建函数
const myArr = [10,100,10,1];
const filterBy = (arr, key) => arr.filter(item => item === key);
filterBy(myArr, 10); // returns [10, 10]
注意:如果不满足提供给筛选器的谓词(在这种情况下,找不到值10),将返回一个空数组。这可以通过使用filter
实现
该方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素
我在下面的解决方案中使用了ES6
arrow语法,使其更加简洁。您还可以直接在数组上调用.filter()
,并显式提供谓词(item==10),而不是为动态提供的谓词创建函数
const myArr = [10,100,10,1];
const filterBy = (arr, key) => arr.filter(item => item === key);
filterBy(myArr, 10); // returns [10, 10]
注意:如果不满足提供给筛选器的谓词(在本例中,找不到值10),将返回一个空数组。类似的内容可能会帮助您找到正确的方向
函数getElementsThatEqual10AtPro