I am attempting to remove a value from an array using splice. starting at 0 and ending at 0 splice, but it is not removing the value at index 0. I added a function getItemRow to check the species index which returns 0. I dumped the values of the array into an alert and it still outputs species which should of been deleted. invalidElement.splice(indexValue, indexValue); works as expected for indexes that are NOT 0. Why is this happening and how do I delete the value that has 0 index?
我试图使用splice从数组中删除一个值。从0开始到0拼接结束,但它没有删除索引0处的值。我添加了一个函数getItemRow来检查返回0的种类索引。我将数组的值转储到一个警报中它仍然输出物种应该被删除。 invalidElement.splice(indexValue,indexValue);对于非0的索引,可以正常工作。为什么会发生这种情况,如何删除具有0索引的值?
javascript code:
javascript代码:
var invalidElement = new Array("species", "alias", "gender", "breeding", "birth_date");
//This function will be removed once fixed!!
function getItemRow()
{
var myPosition=-1
for (i=0;i<invalidElement.length;i++)
{
if(invalidElement[i]=="species") {
myPosition = i;
break;
}
}
alert(myPosition)
}
function validateElement(formId, element, selector, errorContainer)
{
getItemRow()//for testing purposes
//var indexValue = $.inArray(element, invalidElement);
var indexValue = invalidElement.indexOf(element);
alert(element);
$.ajax({
type: 'POST',
cache: false,
url: "validate_livestock/validate_form/field/" + element,
data: element+"="+$(selector).val(),
context: document.body,
dataType: 'html',
success: function(data){
if (data == "false")
{
$(errorContainer).removeClass('element_valid').addClass('element_error');
invalidElement = element;
alert(invalidElement.join('\n'))//for testing purposes
//alert(indexValue);
}
else
{
$(errorContainer).removeClass('element_error').addClass('element_valid');
invalidElement.splice(indexValue, indexValue);
alert(invalidElement.length);//for testing purposes
alert(invalidElement.join('\n'))//for testing purposes
}
}
});
}
$("#species").change(function(){
validateElement('#add_livestock', 'species', '#species', '.species_error_1')
});
4 个解决方案
#1
9
Splice can work in two modes; to remove or insert items.
拼接可以在两种模式下工作;删除或插入项目。
When removing items you'll specify two parameters: splice(index, length)
where index is the starting index, and length is a positive number of elements to remove (fyi: passing a "0", as in your example, does nothing--it's saying "remove zero items starting at index"). In your case you'll want:
删除项目时,您将指定两个参数:splice(index,length)其中index是起始索引,length是要删除的元素的正数(fyi:传递“0”,如示例中所示,不执行任何操作 - - 这是说“删除从索引开始的零项”)。在你的情况下,你会想要:
invalidElement.splice(indexValue, 1); // Remove 1 element starting at indexValue
When inserting items you'll specify (at least) three parameters: splice(index, length, newElement, *additionalNewElements*)
. In this overload you normally pass 0
as a 2nd parameter, meaning to insert the new elements between existing elements.
插入项目时,您将指定(至少)三个参数:splice(index,length,newElement,* additionalNewElements *)。在此重载中,您通常将0作为第二个参数传递,这意味着在现有元素之间插入新元素。
var invalidElements = ["Invalid2", "Invalid3"];
invalidElements = invalidElements.splice(0, 0, "Invalid1");
#2
15
I think you want splice(0, 1)
.
我想你想拼接(0,1)。
The second argument is how many you want removed...
第二个参数是你想删除多少...
An integer indicating the number of old array elements to remove. If howMany is 0, no elements are removed.
一个整数,指示要删除的旧数组元素的数量。如果howMany为0,则不删除任何元素。
资源。
#3
11
There's also a convenience function for removing the first element in an array:
还有一个便利功能,用于删除数组中的第一个元素:
array.shift();
See: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/shift.
请参阅:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/shift。
#4
0
Mozilla Dev Center - Array.splice states that the second parameter is 'howMany' elements to remove.
Mozilla开发中心 - Array.splice声明第二个参数是要删除的“howMany”元素。
I'm not sure how your code worked when it passed in the indexValue as the number of elements to remove, unless you were removing from the end of the array.
我不确定你的代码在indexValue中作为要删除的元素数传递时的工作方式,除非你从数组的末尾删除。
#1
9
Splice can work in two modes; to remove or insert items.
拼接可以在两种模式下工作;删除或插入项目。
When removing items you'll specify two parameters: splice(index, length)
where index is the starting index, and length is a positive number of elements to remove (fyi: passing a "0", as in your example, does nothing--it's saying "remove zero items starting at index"). In your case you'll want:
删除项目时,您将指定两个参数:splice(index,length)其中index是起始索引,length是要删除的元素的正数(fyi:传递“0”,如示例中所示,不执行任何操作 - - 这是说“删除从索引开始的零项”)。在你的情况下,你会想要:
invalidElement.splice(indexValue, 1); // Remove 1 element starting at indexValue
When inserting items you'll specify (at least) three parameters: splice(index, length, newElement, *additionalNewElements*)
. In this overload you normally pass 0
as a 2nd parameter, meaning to insert the new elements between existing elements.
插入项目时,您将指定(至少)三个参数:splice(index,length,newElement,* additionalNewElements *)。在此重载中,您通常将0作为第二个参数传递,这意味着在现有元素之间插入新元素。
var invalidElements = ["Invalid2", "Invalid3"];
invalidElements = invalidElements.splice(0, 0, "Invalid1");
#2
15
I think you want splice(0, 1)
.
我想你想拼接(0,1)。
The second argument is how many you want removed...
第二个参数是你想删除多少...
An integer indicating the number of old array elements to remove. If howMany is 0, no elements are removed.
一个整数,指示要删除的旧数组元素的数量。如果howMany为0,则不删除任何元素。
资源。
#3
11
There's also a convenience function for removing the first element in an array:
还有一个便利功能,用于删除数组中的第一个元素:
array.shift();
See: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/shift.
请参阅:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/shift。
#4
0
Mozilla Dev Center - Array.splice states that the second parameter is 'howMany' elements to remove.
Mozilla开发中心 - Array.splice声明第二个参数是要删除的“howMany”元素。
I'm not sure how your code worked when it passed in the indexValue as the number of elements to remove, unless you were removing from the end of the array.
我不确定你的代码在indexValue中作为要删除的元素数传递时的工作方式,除非你从数组的末尾删除。