【问题标题】:what's wrong with this sort function? javascript [duplicate]这个排序功能有什么问题? javascript [重复]
【发布时间】:2021-10-14 14:16:31
【问题描述】:

我想找出数组中数字最小的元素的索引。 例如:函数 getIndexToIns([3, 2, 10, 7], 4) 将返回 2,因为如果将 4 插入到数组中,则数组应按升序排列为 [2, 3, 4, 7, 10]。而 4 的索引为 2。

我的代码 sn-p 如下,它显示错误“TypeError: newArr.sort is not a function”

function getIndexToIns(arr, num) {
newArr = arr.push(num);
newArr.sort((a, b) => a-b);
return newArr.indexOf(num)
}

getIndexToIns([2, 10, 4], 50);
console.log(getIndexToIns([2, 10, 4], 50))

我的代码 sn-p 有什么问题???

【问题讨论】:

  • arr.push(num) 返回一个数字,而不是一个数组
  • 您尝试解决的任务似乎根本不需要排序。您可以只计算数组中有多少项小于num。如果它是有序插入的,那将是num 的索引。在[3, 2, 10, 7] 中,有两个项目少于4。因此索引为2
  • 我想通了。非常感谢大家! :))

标签: javascript arrays sorting


【解决方案1】:

.push() 修改数组就地,它不返回新数组。所以newArray 不是数组。

您可以使用以下内容创建一个新数组:

let newArr = [...arr, num];

或许:

let newArr = arr.concat([num]);

【讨论】:

  • 您不需要将num 包装到concat() 的数组中。此外,它不需要返回一个新数组(如果它完全返回一个数组),它可以返回相同的数组(因为 Map.set() 在设置后返回 Map ),但重点是它返回推送后数组的新长度。
【解决方案2】:

欢迎。

删除newArr = arr.push(num);中的newArr成为

arr.push(num);

Push 方法不返回数组本身,而是返回新的长度。 Ref

【讨论】:

  • 这是不可接受的,因为它会修改原始数组。
  • @MaxScherban 我在问题中没有看到任何说明不应修改数组的内容。
  • @MaksymShcherban 这取决于开发人员是否希望修改数组。同意这不是完整的答案,我只指出他有TypeError的主要原因
【解决方案3】:

请参阅Array.prototype.push() 的文档:

push() 方法将一个或多个元素添加到数组的末尾,并且 返回数组的新长度。

最重要的是,pushsort 方法会改变您的原始数组。你应该像这样定义你的newArr

const newArr = [...arr, num];

然后你可以像现在这样对它进行排序并找出元素的索引。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多