【问题标题】:Function loops once, then returns函数循环一次,然后返回
【发布时间】:2016-08-27 12:58:23
【问题描述】:

我有这样的功能:

removeDuplicates(item: String, allForToday: Array) {
    let temp = allForToday;
    for (let i = 0; i < temp.length; i++) {
        if (temp[i].indexOf(item) > -1) {
            temp = temp.splice(i, 1);
        }
    }
    return temp;
}

我这样称呼:

for (let i = 0; i < lastWeekItems.length; i++) {
                allForToday = t.removeDuplicates(lastWeekItems[i], allForToday);
 }

传递的lastweekItems[i] 是一个字符串,allForToday 是一个字符串数组,如下所示:1;2;3。 lastweekItems[i] 然后可以是例如 2 我期望的是要检查每个项目的整个数组,如果找到该项目,则从数组中删除它所在的条目,但是我看到的是只检查了 temp[0],然后将数组的整个剩余部分拼接起来,并返回空(temp.length 从 14 变为 1)...

【问题讨论】:

  • 1;2;3 这不是一个数组。
  • 您是否有理由尝试拼接您正在使用的数组,而不是使用filter 或其他东西?
  • 最终结果需要是一个返回的数组,没有重复,我不知道如何使用过滤器
  • 仅供参考,splice 更改了它正在操作的数组的内容。所以使用返回值是没有意义的。此外,数组是引用。所以temp === allForToday。对temp 的修改也将更改allForToday
  • 哦,就是这样,谢谢@MikeC,现在它几乎可以工作了,在我意识到它返回了它删除的元素之后。

标签: javascript arrays loops for-loop typescript


【解决方案1】:

如果您只想删除重复项,您可以使用这样的 reducer:

var arr = [1, 2, 3, 4, 5, 5, 4, 3, 2, 1];

var newArr = arr.reduce(function(acc, val) {
  if(acc.indexOf(val) === -1) {
    acc.push(val);
  }
  return acc;
}, []);

console.log(newArr);

newArr 数组将只包含非重复值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多