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旨在“复制”数组,以便原始数组不被修改,请注意,此行可能需要更改为
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”。