疑似范围问题

时间:2018-05-17 10:32:02

标签: javascript arrays

我正在学习如何编写和处理Hack Reactor拼图(见下文)。 我不明白为什么我的功能块的else部分不起作用。有人能指出我正确的方向吗?

  

编写一个名为getElementsThatEqual10AtProperty的函数。

     

给定一个对象和一个键,getElementsThatEqual10AtProperty返回   包含位于给定数组的所有元素的数组   密钥等于十。

     

注意:

     
      
  • 如果数组为空,则应返回一个空数组。
  •   
  • 如果数组中没有元素等于10,则应该返回一个空数组。
  •   
  • 如果给定键的属性不是数组,则应返回一个空数组。
  •   
  • 如果密钥没有属性,则应返回一个空数组。
  •   

示例:

var obj = { key: [1000, 10, 50, 10] };
var output = getElementsThatEqual10AtProperty(obj, 'key'); 
console.log(output); // > --> [10, 10]

我的解决方案:

var obj = {
  key: '[1000, 10, 50, 10]'
};

function getElementsThatEqual10AtProperty(obj, key) {
  if (typeof Array.isArray(obj[key])) {
    for (let key in obj) {
      tenArray = obj.key = obj[key].filter( element => element === 10);
    }
  } else {
    tenArray = obj.key = [];
  }
  return tenArray;
}

console.log(getElementsThatEqual10AtProperty(obj, 'key'))

最终解决方案

var obj = {
  key: [1000, 10, 50, 10]
};

function getElementsThatEqual10AtProperty(obj, key) {
  if (Array.isArray(obj[key])) {
     tenArray = obj[key].filter( element => element === 10);
  } else {
    tenArray = [];
  }
  return tenArray;
}

console.log(getElementsThatEqual10AtProperty(obj, 'key'))

4 个答案:

答案 0 :(得分:0)

仅使用isArray检查数组,此处不需要typeof



var obj = {
  key: '[1000, 10, 50, 10]'
};
console.log(Array.isArray(obj.key)) // false
console.log(typeof Array.isArray(obj.key)) // 'boolean'
console.log(Boolean(typeof Array.isArray(obj.key))) // true




数字在'键'应该声明值不带单引号,否则它将被视为字符串。



var obj = {
  key: [1000, 10, 50, 10]
};
console.log(Array.isArray(obj.key)) // true




此处不需要for ..in因为密钥已知。我也不需要修改obj.key。

  if (Array.isArray(obj[key])) {
     tenArray = obj[key].filter( element => element === 10);
  }

答案 1 :(得分:0)

Obj [key]未在代码中声明为数组,而是作为字符串声明。您也可以更简单地满足您的要求:



var obj = {
  key: [1000, 10, 50, 10]
};

function getElementsThatEqual10AtProperty(obj, key) {
  if (obj[key] && obj[key] instanceof Array) {
     return obj[key].filter( element => element === 10);
  }  
  return [];
}

console.log(getElementsThatEqual10AtProperty(obj, 'key'));




答案 2 :(得分:0)

过滤数组:

var obj = {
  key: [1000, 10, 50, 10]
}

function getElementsThatEqual10AtProperty(obj, key) {
  var tens = []
  if (Array.isArray(obj[key])) {
    tens = obj[key].filter(function(el) {
      return (10 === el)
    })
  }
  return tens
}

var tensArray = getElementsThatEqual10AtProperty(obj, 'key')

console.log(tensArray)

答案 3 :(得分:-1)

您的问题是您在功能的obj.key部分设置了obj[key]而不是else