首页 > 解决方案 > Javascript没有像预期的那样迭代

问题描述

谁能告诉我为什么我的 JS 没有遍历循环并删除数组中不是“10”的项目?

据我了解,它应该检查数组中的每个项目并删除任何不是 10 的项目,然后返回剩余的“10”项目。

我目前的输出是: [ <1 empty item>, 10, 50, 10 ]

我已经看到了一些答案,它们创建了一个单独的数组并将 10 的项目推送到它,然后返回,但为什么我的代码不起作用?

function getElementsThatEqual10AtProperty(obj, key) {
  if (obj.key.length === 0) {
    return [];
  } else if (!obj.hasOwnProperty(key)) {
    return [];
  } else {
    for (var i = 0; i < obj.key.length; i++) {
      if (obj[key][i] !== 10) {
        delete obj[key][i];
      }
      return obj.key;
    }
  }
}

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

标签: javascript

解决方案


这是一种奇怪的方法设计。它变异返回结果?一般来说,最好是做一个或另一个(参见CQS)。

此外,您的原始方法与对象结构过度耦合。最好让它只在一个数组上操作,而不是任意对象键。

考虑以下:

function getElementsThatEqual10(array) {
  return array.filter(n => n == 10);
}

var obj = {
  key: [1000, 10, 50, 10]
};
var output = getElementsThatEqual10(obj.key);
console.log(output);


推荐阅读