从find方法破坏对象,如何访问find方法的返回值

时间:2019-02-03 06:29:01

标签: javascript

const recipe = recipes.find(recipe => recipe.id === id)

    if (!recipe) {
        location.assign('/index.html')
    }

它工作正常,但是当我从对象中销毁时,在这种情况下如何在销毁时使用此if语句?我没有配方变量了。

const {id, title, body, ingredients} = getRecipes().find(recipe => recipe.id === id)

if (!recipe) {
    location.assign('/index.html')
}

2 个答案:

答案 0 :(得分:2)

如果找到的项目始终具有真实的id属性,则可以使用||来确保右侧始终是对象,从而使您可以立即进行销毁,而不会出现错误

  

无法解构'undefined'或'null'的属性id

像这样:

const {id:foundId, title, body, ingredients} = getRecipes().find(recipe => recipe.id === id) || {};
if (!foundId) {
  location.assign('/index.html')
}

如果.id属性并不总是真实的,请选择其他一些总是真实的属性(如果有)。

也就是说,我仍然希望在开始时不进行任何结构分解-如果您使用原始的if (!recipe) {检查,然后再进行IMO结构分解,则代码将更加清晰。

答案 1 :(得分:1)

您可以破坏变量recipie,而不是破坏直接从.find方法中找到的值:

const recipe = recipes.find(recipe => recipe.id === id)

if (!recipe) {
  location.assign('/index.html')
} else {
  var {id, title, body, ingredients} = recipe;
}