【发布时间】:2018-02-01 23:38:19
【问题描述】:
这是我第一次尝试编写任何代码,所以如果我所做的没有意义,请让我休息一下,并请解释发生了什么。我从来没有上过课或任何东西,只是读了几本书,所以如果你能解释一下,我将不胜感激。我正在尝试解决这个问题(说明如下);
给定一个整数序列作为一个数组,判断是否有可能通过从数组中删除不超过一个元素来获得一个严格递增的序列
所以,这就是我所做的:
function almostIncreasingSequence (sequence) {
for(x=0; x < sequence.length; x++) {
var y = sequence[x];
sequence.splice[x,1];
if (sequence === sequence.sort(function (a, b) {return a > b})) {
return sequence
} else {
sequence.splice[x,0,"y"]
}
}
}
当我将 true 和 false 作为返回它们应该去的地方时,它没有返回我想要的东西,所以我用序列替换了 true 并删除了 false 以查看发生了什么。这正是我所做的,看看它返回了什么,所以我知道从那里去哪里。我不是在问答案。我很困惑为什么它会返回它所做的事情。为什么这总是返回排序和比较的序列(数字从最小到最大)?这不应该是答案,除非它应该返回“真”。我所期望的是它会删除数组的每个元素,一次一个,检查它是否有序,如果没有,则将其放回原处。我选择{return sequence} 只是为了看看这个序列最终做了什么,并且只为了答案应该是真的而返回它。再一次,我想它会检查序列(现在缺少元素序列[x])是否等于从最大到最小排序的序列(sequence === sequence.sort(function (a,b){return a>b})),如果是,则返回'true',或者替换数组[ x] 如果没有。然后重新开始,但它每次只返回从最少到最多的数组。为什么不隔离第四行?它不只是查看它们是否彼此相等,而是服从命令并更改整个序列定义。就像我要写:
function almostIncreasingSequence (sequence) {
for (x=0; x < sequence.length; x++) {
var y = 1;
var x = 3;
if(x === y + x) {
return x
} else {
return y
}
}
}
这不会返回y+x,它总是返回y,那么为什么第一个示例每次都返回sequence.sort(function (a,b){return a>b})?我意识到它对“序列”进行了排序,然后“序列”变成了sequence.sort(function (a,b){return a>b}),但为什么呢?它在if 语句中,应该查看它们是否是===,而不是使序列= 成为排序和比较的序列。它不像,在第二个例子中,x 变成了y+x。这是怎么回事?为什么说if(sequence === sequence.sort(function (a,b){return a>b}))实际上是array.sort[compare function]序列,而它只是应该看看它们是否相等?
【问题讨论】:
-
欢迎来到 Stack Overflow。还请访问help center 并在可能的情况下阅读How to Ask,以便您知道将来要做什么。
-
@Patrick Roberts 谢谢
标签: javascript arrays sorting comparable array-splice