将对象从第一个对象数组推到另一个对象数组

问题描述 投票:0回答:2
defaultParameterTypes = [] // this is my empty array



const propsArray = this.props.device.deviceProperties.defaultParameterTypes;      
 const defaultParameterTypes = this.state.deviceSettings.defaultParameterTypes;

当我选中复选框时,我想将对象推入defaultParameterTypes数组,但情况是当重复输入该类型时,请不要再按两次。

"propsArray": "[{'name': '1','type': '11'}, {'name': '2','type': '22'}, {'name': '3','type': '11'}, {'name': '4','type': '11'}, {'name': '5','type': '22'}, {'name': '6','type': '22'}, {'name': '7','type': '22'}]",

我想进行类似循环,并检查是否在defaultEmptyArray中找不到它,如果没有发现,则推动它但我不需要在mydefaultarray

中重复的类型
reactjs react-native react-redux
2个回答
1
投票

简单的方法是创建一个在数组中看到的类型的映射并将您的输入数组缩小,然后从您创建的映射中获取值的数组。

const data = [
  { name: "1", type: "11" },
  { name: "2", type: "22" },
  { name: "3", type: "11" },
  { name: "4", type: "11" },
  { name: "5", type: "22" },
  { name: "6", type: "22" },
  { name: "7", type: "22" }
];

// reduce array into map of type => { name, type }
// then get the object values array
const reducedData = Object.values(
  data.reduce((acc, { name, type}) => {
    if (!acc[type]) acc[type] = { name, type }; // if not seen type, store
    return acc;
  }, {})
);

console.log(reducedData)

对此概念进行扩展,以创建一个将两个数组作为第二个数组处理为第一个数组的函数。

const data = [
  { name: "1", type: "11" },
  { name: "2", type: "22" },
  { name: "3", type: "44" },
  { name: "4", type: "11" },
  { name: "5", type: "22" },
  { name: "6", type: "33" },
  { name: "7", type: "22" }
];

const data2 = [
  { name: "1", type: "33" },
  { name: "2", type: "22" },
  { name: "3", type: "66" },
  { name: "4", type: "11" },
  { name: "5", type: "22" },
  { name: "6", type: "44" },
  { name: "7", type: "22" }
];

const data3 = [
  { name: "1", type: "66" },
  { name: "2", type: "22" },
  { name: "3", type: "33" },
  { name: "4", type: "11" },
  { name: "5", type: "55" },
  { name: "6", type: "11" },
  { name: "7", type: "44" }
];

const reduceData = (currentArray = [], newArray = []) => {
  const mapFn = (acc, { name, type }) => {
    if (!acc[type]) acc[type] = { name, type }; // if not seen type, store
    return acc;
  };
  const createMap = array => array.reduce(mapFn, {});

  return Object.values(newArray.reduce(mapFn, createMap(currentArray)));
};

const reducedData = reduceData(data, data2);
const reducedData1 = reduceData(reducedData, data3);

console.log(reducedData);
console.log(reducedData1);

0
投票
let hasValue = (arr, obj) => arr && arr.filter(item => item.type == obj.type).length

let result = propsArray.reduce((acc, curr) => {
 if (hasValue(acc, curr)) {
  return acc;
 } else {
  return [...acc, curr]
 }
}, []);

将为您提供一个数组,其中包含type属性是唯一的所有元素。希望这是您的预期结果。

© www.soinside.com 2019 - 2024. All rights reserved.