Javascript array.splice删除错误的值并保留错误的值
我想与没有“拒绝”回应的客人建立一个阵列。因此,牙仙从阵列中删除(不应该,她“接受”了邀请),杰克·弗罗斯特留下(不应该,他“拒绝”了邀请)Javascript array.splice删除错误的值并保留错误的值,javascript,arrays,splice,Javascript,Arrays,Splice,我想与没有“拒绝”回应的客人建立一个阵列。因此,牙仙从阵列中删除(不应该,她“接受”了邀请),杰克·弗罗斯特留下(不应该,他“拒绝”了邀请) 这是因为它们在不同数组中列出的顺序不同 首先,在responses数组中找到“复活节兔子”,然后从coming数组中删除第一个事件,而不检查它是什么。在本例中,它对应于 然后,您通过“Jack Frost”找到“Declient”,并从即将到来的中删除第一个(新的)事件,即现在的“牙齿仙女” 要么更改顺序,使两个数组具有相同的顺序,要么对其进行不同的编码,
这是因为它们在不同数组中列出的顺序不同 首先,在
responses
数组中找到“复活节兔子”,然后从coming
数组中删除第一个事件,而不检查它是什么。在本例中,它对应于
然后,您通过“Jack Frost”找到“Declient”,并从即将到来的中删除第一个(新的)事件,即现在的“牙齿仙女”
要么更改顺序,使两个数组具有相同的顺序,要么对其进行不同的编码,使其不依赖于顺序(这在我看来更好)。这是因为它们在不同数组中列出的顺序不同
首先,在responses
数组中找到“复活节兔子”,然后从coming
数组中删除第一个事件,而不检查它是什么。在本例中,它对应于
然后,您通过“Jack Frost”找到“Declient”,并从即将到来的中删除第一个(新的)事件,即现在的“牙齿仙女”
要么更改顺序,使两个数组具有相同的顺序,要么对其进行不同的编码,使其不依赖于顺序(我认为这更好)。首先,您需要获取即将到来的数组中人员的索引,然后使用splice根据其索引删除该人员
function getAttendees(peopleInvited, responses){
var coming=peopleInvited;
responses.map(function(cell){
if (cell.response=='declined') {
var index = coming.indexOf(cell.name);
coming.splice(index, 1);
}
});
return coming;
}
var people = ['Easter Bunny', 'Tooth Fairy', 'Frosty the Snowman',
'Jack Frost', 'Cupid', 'Father Time'];
var responses = [
{name: 'Easter Bunny', response: 'declined'},
{name: 'Jack Frost', response: 'declined'},
{name: 'Tooth Fairy', response: 'accepted'}
];
getAttendees(people, responses);
首先,您需要获取即将到来的数组中此人的索引,然后使用splice根据其索引删除此人
function getAttendees(peopleInvited, responses){
var coming=peopleInvited;
responses.map(function(cell){
if (cell.response=='declined') {
var index = coming.indexOf(cell.name);
coming.splice(index, 1);
}
});
return coming;
}
var people = ['Easter Bunny', 'Tooth Fairy', 'Frosty the Snowman',
'Jack Frost', 'Cupid', 'Father Time'];
var responses = [
{name: 'Easter Bunny', response: 'declined'},
{name: 'Jack Frost', response: 'declined'},
{name: 'Tooth Fairy', response: 'accepted'}
];
getAttendees(people, responses);
您可以将响应数组改为使用人名作为键的对象。我认为这更容易管理
function getAttendees(people, responses) {
for (var i = 0, l = people.length, out = []; i < l; i++) {
var response = responses[people[i]];
if (!response || response && response === 'accepted') {
out.push(people[i]);
}
}
return out;
}
var people = ['Easter Bunny', 'Tooth Fairy', 'Frosty the Snowman',
'Jack Frost', 'Cupid', 'Father Time'];
var responses = {
'Easter Bunny': 'declined',
'Jack Frost': 'declined',
'Tooth Fairy': 'accepted'
}
函数获取与会者(人员、响应){
for(var i=0,l=people.length,out=[];i
您可以将响应数组改为使用人名作为键的对象。我认为这更容易管理
function getAttendees(people, responses) {
for (var i = 0, l = people.length, out = []; i < l; i++) {
var response = responses[people[i]];
if (!response || response && response === 'accepted') {
out.push(people[i]);
}
}
return out;
}
var people = ['Easter Bunny', 'Tooth Fairy', 'Frosty the Snowman',
'Jack Frost', 'Cupid', 'Father Time'];
var responses = {
'Easter Bunny': 'declined',
'Jack Frost': 'declined',
'Tooth Fairy': 'accepted'
}
函数获取与会者(人员、响应){
for(var i=0,l=people.length,out=[];i
为什么你认为0,1
会知道“正确”的值?我认为拼接中的0(0,1)意味着“从被拒绝的单元开始计数”“继续。可能不好。coming
或splice
或0
或1
都不知道responses
数组中的下降或单元格
。为什么你认为0,1
会知道“正确”值?我认为splice中的0(0,1)意味着“从下降的单元格开始计数”“继续。可能不好。coming
或splice
或0
或1
都不知道响应
数组中的下降或单元格
。如果var coming=peopleinvested原始代码中的code>旨在“复制”数组,以便原始数组不被修改,请注意,此行可能需要更改为var coming=peopleInvited.slice(0)代码>,这将导致一个副本/clone.thx,最后一件事:console.log(index);打印出0和2。为什么是2?“复活节兔子”和“杰克·弗罗斯特”被拒绝了,这不应该是0和1吗?我相信这是因为indexOf在“未来”数组上运行(应该是“人”的副本)。在该数组中,您的两个下降是索引0和3。但是,当函数在0处识别第一个时,它会从数组中删除该元素,将其他元素向下移动。这使以前是索引3的“Jack Frost”变为索引2,在索引2中找到他并在删除他之前打印“2”。如果var coming=peopleinvested;
在原始代码中用于“复制”数组,以便原始数组不被修改,请注意,这一行可能需要更改为var coming=peopleinvested.slice(0);
,这将导致复制/clone.thx,最后一件事:console.log(index);打印出0和2。为什么是2?它不应该是0和1,作为复活节兔子”和“杰克·弗罗斯特”“谢绝”?我相信这是因为indexOf正在“coming”数组上运行(该数组应该是“people”的副本)。在该数组中,您的两个下降是索引0和3。但是,当函数在0处识别第一个时,它会从数组中删除该元素,将其他元素向下移动。这使以前是索引3的“Jack Frost”变为索引2,在该位置找到他并在删除他之前打印“2”。