Есть некий объект, внутри которого другие объекты доступны по ключам:
segment0_0
segment0_1
segment1_0
segment1_1
Мне нужно из объекта эти элементы удалять в цикле, ибо могут встречаться так же и элементы с ключами segment2_0
, segment3_1
и т.д. Попытался удалять их во вложенном цикле, но почему-то последний элемент под ключом segment1_1
никогда не удаляется:
for(let i = 0; i < Object.keys(rules).length; i++) {
for(let j = 0; j < Object.keys(rules).length; j++) {
if(rules[`airports_seg${i}_${j}`]) {
delete rules[`airports_seg${i}_${j}`];
}
}
}
Как мне правильно удалять такие элементы?
Предположим есть объект
var rules = {
segment0_0:1,
segment0_1:'3232',
segment1_0:{},
segment1_1:true,
segment2_1:true,
}
Ключ объекта состоит например из общего признака, типа и id, те в segment0_1 segment-общий признак, 0 - тип, 1 - id. задача удалить типы меньше чем 2
var separator = 'segment';
for(let key in rules)
{
if(key.indexOf(separator)>-1)
{
let info = key.replace(separator,'');
let info_arr = info.split('_');
let type = info_arr[0];
let id = info_arr[1];
if(type<2)
{
delete rules[key];
}
}
}
Прошу прощение если придумал лишнего, у вас недостаточно точное описание задачи, пришлось додумать самому. В любом случае думаю помогло. То что вы делали было очень неправильно, поэтому и не работало
delete myObject.prop;
// или,
delete myObject['prop'];
// или,
var prop = "prop";
delete myObject[prop];
Тест:
var myObject = {
"prop1": "HELLO WORLD",
};
delete myObject.prop1;
По вашему вопросу:
У вас ключи segment0_0 а Вы пытаетесь удалить airports_seg0_0 + у Вас на втором цикле удаляется элемент и у вас цикл просто не доходит до 1_1
var rules = {
segment0_0: "asd",
segment0_1: "asd",
segment1_0: "asd",
segment1_1: "asd",
}
var a = { ...rules };
for(let i = 0; i < Object.keys(rules).length; i++) {
for(let j = 0; j < Object.keys(a).length; j++) {
if(rules[`segment${i}_${j}`]) {
delete rules[`segment${i}_${j}`];
}
}
}
console.log(rules);
еще вариант:
var rules = {
segment0_0: "asd",
segment0_1: "asd",
segment1_0: "asd",
segment1_1: "asd",
}
var arr = [];
for(let i = 0; i < Object.keys(rules).length; i++) {
for(let j = 0; j < Object.keys(rules).length; j++) {
console.log(i,j);
if(rules[`segment${i}_${j}`]) {
arr.push(`segment${i}_${j}`)
}
}
}
for(let i=0; i< arr.length; i++) {
console.log(arr[i])
delete rules[arr[i]];
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Не получается подключить content script с backgroundНе реагирует
Вопрос такой - как сделать, чтобы при выполнении такой функции