#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);
Таким образом, он повторяется один раз и собирает необходимое.