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));