Лучший способ объединить 2 ключа из массива javascript

#javascript #arrays

#javascript #массивы

Вопрос:

У меня есть следующий объект:

 var obj = { "2014": {}, "2013": {}, "2012": {}, "description": null, "image": null },
    objKeys = Object.keys(obj);
//objKeys contains [ "2014", "2013", "2012", "description", "image" ]
  

Я хотел бы удалить «описание» и «изображение» из массива objKeys за один раз, если они там существуют.

Как я могу этого добиться?

Ответ №1:

Вы хотите, чтобы ключи всегда оставались числовыми? Я предполагаю, что это «годы»…

 objKeys.filter(Number); // ["2012", "2013", "2014"]
  

Ответ №2:

Вы можете отфильтровать их следующим образом:

 objKeys = objKeys.filter(function(x){ return !/[a-z]/gi.test(x)});
  

В приведенном выше примере используется тот факт, что другие ключи являются числами. Если вам нужны только description и image , то поместите их в массив и сделайте это:

 var removeKeys = ["description","image"];
objKeys = objKeys.filter(function(x){ return !new RegExp(removeKeys.join("|")).test(x)});
  

Ответ №3:

Вы можете фильтровать их напрямую, используя regex.

 objKeys = objKeys.filter(function(k){ return !/(description|image)/gi.test(k)});
  

Ответ №4:

Небольшая модификация ответа @hutchbat, зачем две итерации по ключам?

Object.keys — это один, а filter — другой. Вот мой код

 var objKeys = [];
for(var i in obj) if(!/(description|image)/gi.test(i)) objKeys.push(i);
  

Таким образом, он повторяется один раз и собирает необходимое.