【问题标题】:How to check for undefined when using find on an javascript array在javascript数组上使用find时如何检查未定义
【发布时间】:2019-05-27 23:30:18
【问题描述】:

在我的数组中,我使用 .find 来查找对象并将其属性设置为某个值。 我只想在有值的情况下设置名称。 IE;检查未定义 下面是我的数组,正在使用 .find 查找对象并设置其名称。 我只想在找到 id === checkid 的对象时设置。

 this.myarray.find(colDef => colDef.id === checkid).name = newname;.

【问题讨论】:

    标签: javascript arrays find


    【解决方案1】:

    您可以使用Object.assign 在一个语句中执行此操作,如下所示:

    let myArray = [{id: 1, name: 'Boris'}, {id: 2}]
    
    // id 3 does not exist no changes would be made to myArray
    Object.assign(myArray.find(x => x.id == 3) || {}, {name: 'Foo'})
    
    // id 1 is there so name would be changed to 'john'
    Object.assign(myArray.find(x => x.id == 1) || {}, {name: 'john'})
    
    console.log(myArray)

    如果Array.find 找不到具有提供的 id 的对象,则向Object.assign 提供object literal

    这样做的另一个好处是您现在可以传递一个用于更新的对象,这样您就可以轻松地一次更新多个属性:

    let myArray = [{id: 1, name: 'Boris'}, {id: 2}]
    
    // id 1 is there so name would be changed to 'john'
    Object.assign(myArray.find(x => x.id == 1) || {}, {name: 'john', state: 'FL'})
    
    console.log(myArray)

    【讨论】:

    • 这真的很好,使用 Object.assign。谢谢!
    • 很高兴你喜欢它。如果这回答了您的问题,请将其标记为已接受的答案,以便其他人可以更轻松地找到它。谢谢。
    • 我来找undefined,然后带着Object.assignment 回家。这很漂亮。
    【解决方案2】:

    您需要运行find 作为它自己的语句并检查结果是否已定义。如果是,请指定名称,否则不要:

    let myarray = [
        {id: 100},
        {id: 10},
        {id: 5}
    ]
    
    let found = myarray.find(colDef => colDef.id === 10)
    
    if (found !== undefined){
        found.name = "some name"
    } 
    console.log(found)
    
    // no id 11 found will be undefined
    found = myarray.find(colDef => colDef.id === 11)
    console.log(found)

    单行:

     this.myarray.find(colDef => colDef.id === checkid).name = newname;
    

    没有机会检查find() 是否返回undefined 并尝试将属性分配给undefined 将是一个错误。

    【讨论】:

    • 我有点想看看我们是否可以在一个语句中与 find 一起做。总之谢谢!
    【解决方案3】:

    这里有两种方法。

    如果您不在乎,请使用 fireAndForget 样式。

    如果您真的想知道,请进行更详细的检查。

    const arr = [{id:1}];
    
    const fireAndForget = (arr, id, newName) => (arr.find(i => i.id === id)||{}).name = newName;
    
    const checkAndNotify = (arr, id, newName) => {
      const p = arr.find(i => i.id === id);
      if(!p) return false;
      p.name = newName;
      return true;
    };
    
    console.log(checkAndNotify(arr, 2, 'test'));
    console.log(checkAndNotify(arr, 1, 'test'));
    console.log(arr);
    
    console.log(fireAndForget(arr, 2, 'test2'));
    console.log(fireAndForget(arr, 1, 'test2'));
    console.log(arr);

    【讨论】:

      【解决方案4】:

      /检查obj是否不是未定义的null,以及它是否是一个对象。如果 if 是有效对象,则为 '.name' 赋值

      const obj = this.myarray.find(colDef => colDef.id === checkid);
      
      if (obj && typeof obj === "object") {
        obj.name = newName;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-22
        • 2012-07-05
        • 1970-01-01
        • 2015-09-27
        • 2015-04-26
        • 1970-01-01
        • 1970-01-01
        • 2010-10-25
        相关资源
        最近更新 更多