Как проверить неопределенность при использовании поиска в массиве JavaScript - PullRequest
0 голосов
/ 28 мая 2019

В моем массиве я использую .find, чтобы найти объект и установить для его свойства какое-то значение.Я хочу установить имя, только если есть значение.то есть;проверка на неопределенность Ниже приведен мой массив, я использую .find, чтобы найти объект и установить его имя.Я хочу установить, только если найден объект с id === checkid.

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

Ответы [ 4 ]

1 голос
/ 28 мая 2019

Вы можете сделать это одним оператором с помощью 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)

Идея состоит в том, чтобы предоставить Object.assign object literal, если Array.find не находит объект с предоставленным идентификатором.

ДругойПреимущество этого заключается в том, что теперь вы передаете объект для обновления, чтобы вы могли легко обновлять более одного свойства одновременно:

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)
1 голос
/ 28 мая 2019

Вам нужно запустить 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 будет ошибкой.

0 голосов
/ 28 мая 2019

/ Проверьте, не является ли объект пустым из неопределенного, и является ли он объектом.Если if является допустимым объектом, тогда присвойте значение для '.name'

const obj = this.myarray.find(colDef => colDef.id === checkid);

if (obj && typeof obj === "object") {
  obj.name = newName;
}
0 голосов
/ 28 мая 2019

Вот оба пути сближения.

Если вам все равно, используйте стиль 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...