首页 > 解决方案 > 添加到数组时检查对象属性 - ES6

问题描述

我有一个简单的算法问题,但找不到合适的解决方案。有一个数组,如果数组中的任何对象属性值的属性recipe_id都不相同,我只想在数组中添加一个项目。recipe_id

如果它具有相同的属性值,我想阻止添加任何项目。如果财产的价值不同,那没关系。因此,Recipes 数组中的所有对象都应该具有不同的recipe_id值。我编写了这些代码,但它似乎无法正常工作

这是 JSBin 链接:链接

   const Recipes =[
  {recipe_id:4},
  {recipe_id:5}
]

onClickedHandler = (recipe_id) => {

            const favData = {
                recipe_id: recipe_id,
            }
            if (Recipes.length > 0) {
                for (let item in Recipes) {
                    if (Recipes[item].recipe_id !== recipe_id) {
                        console.log("added in the loop!")
                        Recipes.push(item)

                    } else {
                        console.log("it is already in the Recipe list!")
                    }
                }
            } else {
              console.log("Recipes is empty")
                 Recipes.push({recipe_id:recipe_id})
            }

    }
  onClickedHandler(9)
  console.log(Recipes.length)

标签: javascriptarrays

解决方案


使用Array.some方法检查 ID 是否存在于数组中。你可能需要类似的东西:

const Recipes =[
 {recipe_id:4},
 {recipe_id:5}
];

function addRecipe(recipeId) {
  if(!Recipes.some(item => item.recipe_id === recipeId)) {
    Recipes.push({recipe_id:recipeId});
    console.log("Not duplicate, inserted");
  } else {
    console.log("duplicate");
  }
}

addRecipe(4);
addRecipe(6);
console.log(Recipes)


推荐阅读