Как удалить массив из объекта? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь написать функцию, которая перебирает данный объект (obj). Каждый раз, когда он сталкивается с массивом внутри объекта, он удаляет массив. Код кажется подходящим, но, пожалуйста, скажите мне, что мне не хватает:

function removeArrayValues(obj) {

  for (isKeyAnArray in obj) {
     if (typeof obj[isKeyAnArray] === 'array') {
       delete obj[isKeyAnArray];
    }
  }
}

var obj = {
  a: [1, 3, 4],
  b: 2,
  c: ['hi', 'there']
}

removeArrayValues(obj);
console.log(obj); // --> { b: 2 }

Ответы [ 4 ]

2 голосов
/ 17 января 2020

typeof возвращает "object" для массива. Вы можете использовать Array.isArray(), чтобы проверить, является ли свойство массивом.

Вот модифицированная версия вашего кода:

function removeArrayValues(obj) {

  for (isKeyAnArray in obj) {
     if (Array.isArray(obj[isKeyAnArray])) {
       delete obj[isKeyAnArray];
    }
  }
}

var obj = {
  a: [1, 3, 4],
  b: 2,
  c: ['hi', 'there']
}

removeArrayValues(obj);
console.log(obj);
0 голосов
/ 17 января 2020

Обратите внимание, что это не приведет к изменению исходного объекта (просто добавьте альтернативный ответ, если это может помочь):

const newObj = Object.fromEntries(
  Object.entries(obj).filter(([, value]) => !Array.isArray(value))
)

console.log(newObj);
0 голосов
/ 17 января 2020

@ Способ Гохан Сари точен. Это скорее дополнение, если вы хотите go es6 или просто хипстерский маршрут: D

const removeArrayValues = obj => Object.entries(obj).forEach(val => Array.isArray(val[1]) && delete obj[val[0]]);
0 голосов
/ 17 января 2020

проверить, является ли это массив другим способом. В прилагаемом примере кода показаны 2 варианта.

function removeArrayValues(obj) {

  for (isKeyAnArray in obj) {
     if (obj[isKeyAnArray] instanceof Array){
       console.log("instanceof array true");
       delete obj[isKeyAnArray];
     }
     if (Array.isArray(obj[isKeyAnArray])){
       console.log("isArray true");
       delete obj[isKeyAnArray];
     }
     console.log(typeof obj[isKeyAnArray]);
     if (typeof obj[isKeyAnArray] === 'array') {
       delete obj[isKeyAnArray];
    }
  }
}

var obj = {
  a: [1, 3, 4],
  b: 2,
  c: ['hi', 'there']
}

removeArrayValues(obj);
console.log(obj); // --> { b: 2 }
document.getElementById("exampleText").innerHTML = JSON.stringify(obj);
<p id="exampleText"></p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...