我正在使用useState钩子,当我单击输入值按钮时,它更新了我的状态,并在数组中添加了新的元素。我想在这里实现这一点,当我单击相同的正负数值时,应该从数组中移除两个相同的数字--例如,当我单击一个按钮并添加元素时,如果我添加了3和-3,那么这两个数字都应该从数组中删除,如示例所示。
-3、1、2、3、4= 1、2、4
帮我解决这个问题
import "./styles.css";
import { useState } from "react";
export default function App() {
const [data, setData] = useState([]);
const [number, setNumber] = useState("");
const onDataSubmit = (event) => {
event.preventDefault();
setData([...data, number]);
};
return (
<div className="app">
<div className="container">
<div className="container1">
<div className="input">
<input
id="title"
type="number"
value={number}
onChange={(event) =>
setNumber(event.target.value)}
name="title"
placeholder="Title"
/>
</div>
<div>
<button className="btn" onClick={onDataSubmit}>
Submit
</button>
</div>
</div>
<div className="container2">{data.sort((a, b) => a - b)}</div>
</div>
</div>
);
}发布于 2022-11-24 11:12:21
若正数
// new number is 3
[-3,1,2] => [1,2]若负数
// new number is -2
[-3,1,2] => [-3,1]const onDataSubmit = (event) => {
event.preventDefault();
const absNumber = Math.abs(number);
// both check if number is positive or negative
if (
data.find(
(n) => Math.abs(n) === absNumber || -Math.abs(n) === -absNumber
) === undefined
)
return setData([...data, number]);
// if number is not in the array add the new number
setData((prevData) => {
return prevData.filter(
(n) => Math.abs(n) !== absNumber || -Math.abs(n) !== -absNumber
);
});
};发布于 2022-11-24 13:12:50
为了添加之前提交的内容,下面这一项将检查所有的边缘情况,并尝试减少on循环。上面写着:-
const update_data = num => {
if (!data.includes(num) && !data.includes(Math.abs(num)*-1) && !data.includes(Math.abs(num))) {
setData([...data, num])
} else {
setData(data.filter(y => y + num !== 0))
}
}给定以下数组,运行上述结果:-
let data = [1, 2, 3, 4, 5, 6, 7, -8]输入8- 1、2、3、4、5、6、7
输入-1 -- 2,3,4,5,6,7,-8
输入2 - 1、2、3、4、5、6、7、-8
输入9- 1、2、3、4、5、6、7、-8、9
希望你觉得这有帮助。
发布于 2022-11-24 11:02:41
尝尝这个
let array = [-3, 1, 2, 3, 4]
let positiveArray=array.map(n=>Math.abs(n))
let newData = positiveArray.filter((n, i,a) => {
let arr = [...positiveArray];
arr.splice(i, 1);
return !(arr.includes(n));
})
console.log(newData); // [1,2,4]https://stackoverflow.com/questions/74559576
复制相似问题