Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从对象键返回元素数组_Javascript_Arrays - Fatal编程技术网

Javascript 从对象键返回元素数组

Javascript 从对象键返回元素数组,javascript,arrays,Javascript,Arrays,给定一个对象和一个键,我创建了一个函数,该函数返回一个数组,该数组包含位于给定键的数组中等于10的所有元素 如果数组为空,则应返回空数组;如果数组不包含等于10的元素,则应返回空数组;如果给定键处的属性不是数组,则应返回空数组 function getElementsThatEqual10AtProperty(obj, key) { for(var prop in obj){ if(obj[prop] === 10){ return obj[key]; } }

给定一个对象和一个键,我创建了一个函数,该函数返回一个数组,该数组包含位于给定键的数组中等于10的所有元素

如果数组为空,则应返回空数组;如果数组不包含等于10的元素,则应返回空数组;如果给定键处的属性不是数组,则应返回空数组

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)
因此,道具将在第一次迭代的“关键点”中。然后你问does
obj['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)
因此,道具将在第一次迭代的“关键点”中。然后你问does
obj['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