经常看到这个问题,但找不到我正在寻找的东西。
onClick
我将项目推送到我拥有的数组,但是,如果我的数组中有3个项目,我不想再推送项目了。
var selectedData = [];
我设置了我的空变量。
var index = selectedData.indexOf(3);
然后我得到我的数组的索引是3
if (index > 3) {
selectedData.splice(index, 1);
}
然后在我的if statement
内,如果我的索引为3,大于3,则在index
拼接并删除一个。
selectedData.push(TheThing);
如果上面的if语句不正确,我会将TheThing
推送到我的数组。
但是,我有一个变量var arrayLength = selectedData.length;
来抓取长度,当我控制台记录它时,它从0
开始,并在4.之后拼接任何项目。不是3。
知道我做错了什么或被误解了吗? 感谢
我的代码的更完整示例
var selectedData = [];
myElement.on('click', function() {
var index = selectedData.indexOf(3);
if (index > 3) {
selectedData.splice(index, 1);
}
var arrayLength = selectedData.length;
console.log(arrayLength, 'the length');
});
简而言之,onClick
检查我的数组,并在第三个添加到我的数组中之后删除任何内容。
答案 0 :(得分:1)
您希望它表现为堆栈还是队列?
所以你的代码在这里:
var index = selectedData.indexOf(3);
不是抓住第三个索引 - 它抓住第一个索引,它看到3,如果不是,则抓取-1。用,
替换你的if语句if (selectedData.length > 3) {
selectedData.pop() // removes last element (stack)
// or
selectedData = selectedData.slice(1) //remove first element (queue)
}
答案 1 :(得分:0)
我认为您需要尝试var arrayLength = selectedData.length -1;
你从正常数组开始,但不是以空数组开始吗?
另外,当您使用.length
时,它会返回数组或集合的真实计数,而不是0索引。
`
答案 2 :(得分:0)
您可以像这样覆盖数组的push()
方法:
var a = [];
a.push = function(){}
或者像这样
a.push = function (newEl){
if(this.length <3){
Array.prototype.push.call(this, newEl)
}
}
这不是完整的例子,因为push()可以采用许多参数,你也应该处理这种情况
答案 3 :(得分:0)
var index = selectedData.indexOf(3);只需为您提供值为3的数组元素的索引 实施例
selectedData = [ 0, 3 , 2];
alert( selectedData.indexOf( 3 ) ); // this will alert "1" that is the index of the element with value "3"
答案 4 :(得分:0)
您可以使用此方案
var selectedData = [];
myElement.on('click', function() {
//if selectedData length is less than 3, push items
});
答案 5 :(得分:0)
这可行。
myElement.on('click', function() {
if(selectedData.length > 3){
selectedData = selectedData.splice(0, 3);
}
console.log(selectedData.length, 'the length');
});