首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从数组中移除多个相同的正负

如何从数组中移除多个相同的正负
EN

Stack Overflow用户
提问于 2022-11-24 10:53:37
回答 5查看 52关注 0票数 0

我正在使用useState钩子,当我单击输入值按钮时,它更新了我的状态,并在数组中添加了新的元素。我想在这里实现这一点,当我单击相同的正负数值时,应该从数组中移除两个相同的数字--例如,当我单击一个按钮并添加元素时,如果我添加了3和-3,那么这两个数字都应该从数组中删除,如示例所示。

-3、1、2、3、4= 1、2、4

帮我解决这个问题

代码语言:javascript
复制
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>
  );
}
EN

回答 5

Stack Overflow用户

发布于 2022-11-24 11:12:21

若正数

代码语言:javascript
复制
// new number is 3
[-3,1,2] => [1,2]

若负数

代码语言:javascript
复制
// new number is -2
[-3,1,2] => [-3,1]
代码语言:javascript
复制
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
    );
  });
};
票数 1
EN

Stack Overflow用户

发布于 2022-11-24 13:12:50

为了添加之前提交的内容,下面这一项将检查所有的边缘情况,并尝试减少on循环。上面写着:-

代码语言:javascript
复制
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))
    }
}

给定以下数组,运行上述结果:-

代码语言:javascript
复制
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

希望你觉得这有帮助。

票数 1
EN

Stack Overflow用户

发布于 2022-11-24 11:02:41

尝尝这个

代码语言:javascript
复制
    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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74559576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档