Reactjs 删除数组中的特定值并添加新的更新值

Reactjs 删除数组中的特定值并添加新的更新值,reactjs,Reactjs,我试图在添加或推送另一个更新的值之前删除数组中现有的特定值。我的目的是避免将相同的id和值复制到数组中。我试图实现的是当onchange触发时,检查数组中是否存在该值,如果存在,则删除旧值并推送更新值 const [array, setnewarray] = useState([]); function handlechangeselected(val,id){ var newarray = array; const valueToRemove = i

我试图在添加或推送另一个更新的值之前删除数组中现有的特定值。我的目的是避免将相同的id和值复制到数组中。我试图实现的是当onchange触发时,检查数组中是否存在该值,如果存在,则删除旧值并推送更新值

  const [array, setnewarray] = useState([]);
     function handlechangeselected(val,id){

       var newarray = array;
       const valueToRemove = id;
       newarray.filter(item => item.id === valueToRemove);

        newarray.push({ value: val, id:id });
       setnewarray(newarray);

  }




  <select                                                                              
   onChange={(e) => handlechangeselected(e.target.value,row.ID)}                                                                                
  >

      <option value="0">0</option>                                                                             
      <option value="1">1</option>                                                                           
      <option value="2">2</option>

  </select>
const[array,setnewarray]=useState([]);
已选择功能手柄更改(val,id){
var newarray=数组;
const valueToRemove=id;
newarray.filter(item=>item.id==valueToRemove);
push({value:val,id:id});
setnewarray(newarray);
}
handlechangeselected(e.target.value,row.ID)}
>
0
1.
2.

第一个问题是
过滤器不修改数组,而是返回一个新数组。您没有使用返回的数组,因此
newArray
保持不变

另一个问题是,
filter
过滤掉回调中返回false的任何值,因此您希望过滤器对与
值不匹配的任何项返回true以删除
(换句话说,
!=
,而不是
=
)。您还可以使用
.concat
数组之后进行链。筛选

这里有一点简化:

     const [array, setNewArray] = useState([]);

     function handlechangeselected(value, id){
       const newArray = array
         .filter(item => item.id !== id)
         .concat({ value, id });

       setNewArray(newArray);
     }