我在尝试做一些非常简单的事情时遇到了重大问题。 我根据select元素的值将元素推送到数组中。
我推送元素很好,但是如果用户将选择选项更改为“否”'我想从数组中删除一个特定的元素。我谷歌远远地和广泛尝试了很多东西,阵列拼接方法似乎是要走的路。
我的问题是,根据文档,返回的数组是被删除的元素。我不想要这个,我想要保留在数组中的元素。
我实施的代码几乎可以工作但不完全。我可以添加到数组中,如果只有一个数组项我可以删除它。如果里面有多个项目,那么当我删除所需的元素时,它会返回数组中被删除的元素,其中我想返回数组中的其余元素。
到目前为止,这是我的代码
var pplArray = [];
$("#ddl_KnowlComp").change(function () {
if($('#ddl_KnowlComp').find("option:selected").text() == 'Yes' ){
$('#d_KnowlCompDate').attr('required', 'required');
pplArray.push( $("#ppl_KnowlSigned_TopSpan_HiddenInput"));
console.log(pplArray);
} else {
$('#d_KnowlCompDate').removeAttr('required');
$('#d_KnowlCompDate').val('');
var itemtoRemove = $("#ppl_KnowlSigned_TopSpan_HiddenInput");
removeArrayItem(itemtoRemove,pplArray);
}
});
$("#ddl_IniComEngComp").change(function () {
if($('#ddl_IniComEngComp').find("option:selected").text() == 'Yes' ){
$('#d_IniComEngCompDate').attr('required', 'required');
pplArray.push ($("#ppl_IniComEngCompSigned_TopSpan_HiddenInput"));
console.log(pplArray);
} else {
$('#d_IniComEngCompDate').removeAttr('required');
$('#d_IniComEngCompDate').val('');
var itemtoRemove = $("#ppl_IniComEngCompSigned_TopSpan_HiddenInput");
removeArrayItem(itemtoRemove,pplArray);
}
});
function removeArrayItem(itemtoRemove, arr){
arr.splice($.inArray(itemtoRemove, arr),1);
console.log(pplArray);
}
如果有人可以指出我的问题会很棒: - )
答案 0 :(得分:0)
你应该能够拥有新阵列!
但我建议使用splice(index, 1)
,
得到元素的索引,然后删除它,你应该得到一个没有它的新数组!
如果您想查看已删除的项目:
1-可以创建变量。 2-根据(索引)将项目保存到删除之前。 3-删除它。 4-使用你创建的变量来显示它!
:)
答案 1 :(得分:0)
由于.splice()
从原始数组中删除了一个项目,因此您可以忽略.splice()
的返回值并使用原始数组。
例如,你有这个:
newArray = arr.splice($.inArray(itemtoRemove, arr),1);
console.log(newArray);
相反,它会是这样的:
arr.splice( $.inArray(itemtoRemove,arr), 1 );
console.log(arr);
(我没有检查任何剩余的逻辑,包括$.inArray()
调用,只是建议如何删除元素的数组 - 它只是原始的 - 现在修改了 - 数组。)
答案 2 :(得分:0)
$ .grep()方法根据需要从数组中删除项目,以便所有剩余项目都通过提供的测试。测试是一个传递数组项的函数和数组中项的索引。只有当测试返回true时,该项才会在结果数组中。
filter函数将传递两个参数:当前数组项及其索引。过滤功能必须返回' true'将项目包含在结果数组中。
答案 3 :(得分:0)
您有两个问题:
splice(-1, 1)
将替换array
splice
修改原始array
一些澄清:
let arr = [1, 2, 3];
const iFound = 2;
const iNotFound = 4;
const p1 = arr.indexOf(iFound);
console.log(`${iFound} found at ${p1}`);
const p2 = arr.indexOf(iNotFound);
console.log(`${iNotFound} found at ${p2}`);
arr.splice(p1, 1, 'x');
console.log(arr);
// your problem is here
// for the case where the element is not found
// it will be replaced the last element
// in the collection
arr.splice(p2, 1, 'x');
console.log(arr);
代码的修复方法是:
function removeArrayItem(itemtoRemove, arr){
let pos = $.inArray(itemtoRemove, arr);
//Note: splice modifies the original array
pos >-1 && arr.splice(pos,1);
console.log(arr);
}