Javascript 将对象键作为参数传递给函数

Javascript 将对象键作为参数传递给函数,javascript,Javascript,我正在尝试创建一个函数来对数组执行操作。 我传递对象键和数组作为参数来运行函数。函数在查找传递的键的索引时失败。请帮助我理解如何将对象键作为参数传递给函数以执行操作 const [addOn, setAddOn] = useState([ { itemName: 'Honey', isChecked: false, itemPrice: '20', itemImgURL: 'https://res.cloudinary.

我正在尝试创建一个函数来对数组执行操作。 我传递对象键和数组作为参数来运行函数。函数在查找传递的键的索引时失败。请帮助我理解如何将对象键作为参数传递给函数以执行操作

  const [addOn, setAddOn] = useState([
    {
      itemName: 'Honey',
      isChecked: false,
      itemPrice: '20',
      itemImgURL:
        'https://res.cloudinary.com/antilibrary/image/upload/v1593326411/Piatto/Icons/honey_ji1muy.svg'
    },
    {
      itemName: 'Pickle',
      isChecked: false,
      itemPrice: '30',
      itemImgURL:
        'https://res.cloudinary.com/antilibrary/image/upload/v1593326410/Piatto/Icons/food-and-restaurant_th26ol.svg'
    },
    {
      itemName: 'Eggs',
      isChecked: false,
      itemPrice: '300',
      itemImgURL:
        'https://res.cloudinary.com/antilibrary/image/upload/v1593326408/Piatto/Icons/egg_a95mqk.svg'
    },
    {
      itemName: 'Cheese',
      isChecked: false,
      itemPrice: '3',
      itemImgURL:
        'https://res.cloudinary.com/antilibrary/image/upload/v1593326405/Piatto/Icons/cheese_cicwad.svg'
    },
    {
      itemName: 'Bacon',
      isChecked: false,
      itemPrice: '399',
      itemImgURL:
        'https://res.cloudinary.com/antilibrary/image/upload/v1593326404/Piatto/Icons/Bacon_yi7qvy.png'
    },
    {
      itemName: 'Chicken',
      isChecked: false,
      itemPrice: '400',
      itemImgURL:
        'https://res.cloudinary.com/antilibrary/image/upload/v1593326406/Piatto/Icons/chicken_qxzicr.svg'
    }
  ]);

你应使用: const objIndex=Array.findIndexobj=>obj[key]==e.target.value

此外,在CreateUpdateArray函数中将参数名更改为addOn而不是Array


您正确地传递了对象键,但使用方式错误。这样,它将在obj中查找一个名为字段的键。

您确定要在此处使用useState吗?也许考虑使用用户教育器?是的…要使用useState。。我试图通过将key和array作为参数传递来重构代码。我打算在其他组件中使用该函数,因此将其重新分解以处理any数组和key。您能建议更好的方法吗?我看不出任何问题,您传递key name和array变量的方式。我刚才提到,您应该使用AddOnCollection这样的通用参数名,而不是Array,因为Array是Array类的保留字。const DeleteAndUpdateArray=key,Array=>{const newData=Array.filterobj=>obj[key]!==e.target.value;const objIndex=Array.findIndexobj=>obj[key]===e.target.value;const updatedObj={…数组[objIndex],isChecked:false};const updatedArray=[…数组.slice0,objIndex,updatedObj,…数组.slicedobjindex+1];返回{newData,updatedArray};};设{newData,updateArray}=DeleteAndUpdateArrayitemName,addOn;setAddOnupdatedArray;setAddOnDatanewData;我试图将相同的逻辑应用于其他场景,以获得相同的回报array@SagarMahadik:const DeleteAndUpdateArray=key,collection=>{const newData=collection.filterobj=>obj[key]!==e.target.value;const objIndex=collection.findIndexobj=>obj[key]==e.target.value;const updatedObj={…collection[objIndex],isChecked:false};集合[objIndex]=updatedbj;常量updatedArray=[…集合];/*newData=[updatedbj];*/return{newData,updatedArray};};设{newData,updateArray}=DeleteAndUpdateArrayitemName,addOn;
  const updateAddonData = e => {
    if (e.target.checked) {
      const createUpdatedArray = (key, Array) => {
        console.log(key);
        console.log(addOn);
        console.log(e.target.value);
        const objIndex = Array.findIndex(obj => obj.key === e.target.value);
        console.log(objIndex);
        const updatedObj = { ...Array[objIndex], isChecked: true };
        const updatedNewAddData = [updatedObj];

        const updatedArray = [
          ...Array.slice(0, objIndex),
          updatedObj,
          ...Array.slice(objIndex + 1)
        ];
        return { updatedNewAddData, updatedArray };
      }; /**
       *       const objIndex = addOn.findIndex(obj => obj.itemName === e.target.value);

      const updatedObj = { ...addOn[objIndex], isChecked: true };
      const updatedNewAddData = [updatedObj];

      const updatedAddOn = [
        ...addOn.slice(0, objIndex),
        updatedObj,
        ...addOn.slice(objIndex + 1)
      ];
       */

      let { updatedNewAddData, updatedArray } = createUpdatedArray(
        `itemName`,
        addOn
      );

      setAddOn(updatedArray);
      setAddOnData(addOnData.concat(updatedNewAddData));