Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果不匹配,则添加到react中的数组_Javascript_Html_Reactjs - Fatal编程技术网

Javascript 如果不匹配,则添加到react中的数组

Javascript 如果不匹配,则添加到react中的数组,javascript,html,reactjs,Javascript,Html,Reactjs,我有两个数组,一个作为道具传入,称为“navPrimary”,另一个以状态存储,称为“dataArray”。我试图做的是循环遍历navPrimary数组,然后抓取标签,如果它不存在,只将其添加到“dataArray”中。到目前为止,它可以工作,但如果它存在或不存在,它将添加它。我知道我可以使用indexOf或filter来获得我需要的东西,但我不知道语法或包装技术来让它工作 const [dataArray, setDataArray] = useState([]); setDataArray

我有两个数组,一个作为道具传入,称为“navPrimary”,另一个以状态存储,称为“dataArray”。我试图做的是循环遍历navPrimary数组,然后抓取标签,如果它不存在,只将其添加到“dataArray”中。到目前为止,它可以工作,但如果它存在或不存在,它将添加它。我知道我可以使用indexOf或filter来获得我需要的东西,但我不知道语法或包装技术来让它工作

const [dataArray, setDataArray] = useState([]);

setDataArray(dataArray.concat(navPrimary.map((item) => item.label)));

如果您不希望dataArray始终包含重复元素,则Set可以提供帮助:

setDataArray([...new Set(dataArray.concat(navPrimary.map((item) => item.label)))]);

如果您不希望dataArray始终包含重复元素,则Set可以提供帮助:

setDataArray([...new Set(dataArray.concat(navPrimary.map((item) => item.label)))]);
试试这个:

setDataArray(dataArray.concat(navPrimary.map((item) => item.label)).filter(label => !dataArray.includes(label)));
试试这个:

setDataArray(dataArray.concat(navPrimary.map((item) => item.label)).filter(label => !dataArray.includes(label)));

我将创建一个单独的钩子来处理这个通用逻辑,并更改存储数据的方式

// hooks.js
export const useUniqueElements = (data) => {
  const [dataSet, updateDataSet] = useState(new Set(data));
  
  const addElements = (newData) => {
    updateDataSet(new Set([
      ...dataSet,
      ...newData
    ]));
  }

  return {
    data: [...dataSet],
    addElements
  }
}

// helpers.js

export const getLabels = (data) => data.map(({label}) => label);

// MyComponent.js
const MyComponent = (initialList) => {
  const {addElements, data} = useUniqueElements(getLabels(initialList));

  const onSubmit = (newList) => {
    addElements(getLabels(newList));
  }

  // render stuff here
}

我将创建一个单独的钩子来处理这个通用逻辑,并更改存储数据的方式

// hooks.js
export const useUniqueElements = (data) => {
  const [dataSet, updateDataSet] = useState(new Set(data));
  
  const addElements = (newData) => {
    updateDataSet(new Set([
      ...dataSet,
      ...newData
    ]));
  }

  return {
    data: [...dataSet],
    addElements
  }
}

// helpers.js

export const getLabels = (data) => data.map(({label}) => label);

// MyComponent.js
const MyComponent = (initialList) => {
  const {addElements, data} = useUniqueElements(getLabels(initialList));

  const onSubmit = (newList) => {
    addElements(getLabels(newList));
  }

  // render stuff here
}