2016-10-26 4 views
0

У меня есть объект JavaScript:Как удалить элемент из вложенного объекта с заданной строкой?

var obj = $scope.items[0]; //$scope.items is a plain object 
console.log(typeof obj)  //object 

Теперь после этого я сделать некоторые рекурсии и получить путь (цепь свойств), которые присоединяются к «OBJ», который кодируется в виде строки и выглядит следующим образом :

str = ".child.splice(" + item_index + ",1)"; //item_index is an integer 

Я хочу применить это к объекту. Я попытался это так:

var objToDelete = obj += str 
console.log(typeof objToDelete) //string 

Я пытаюсь удалить элемент в простой объект, и он работает, если я жестко закодировать это так:

delete $scope.items[0].child.splice(1,1); 

То, что я на самом деле хочу использование:

delete objToDelete; // *doesn't work* 

Однако это не удается, так как тип objToDelete является строкой.

Как сохранить объект objToDelete как объект и заставить его работать?

+0

* «Привет, ребята» * ... почему вы исключаете среди нас дам? Достаточно оснований для понижения imo. – trincot

+0

Сбор строки, которая действительно является частичным кодом JavaScript, не кажется хорошей идеей, так как вам придется вернуться к 'eval'. Возможно, вы могли бы поделиться кодом, который у вас есть, который генерирует эту строку. Вероятно, эта часть кода должна быть пересмотрена. – trincot

+0

@trincot Какая причина для downvote! Ценить это. Хотелось бы, чтобы вы больше сосредоточились на вопросе. В любом случае, нет никакой проблемы с генерируемой строкой. Предположим, что это «.child.splice (1,1)». Я не мог придумать какой-либо другой подход, а также имею дело со сложным вложенным JSON. – sharathChandra

ответ

0

Какая у вас конечная цель? Будет что-то вроде этой работы? Просто измените ITEM_INDEX

delete $scope.items[0].child.splice(item_index,1); 

Если вы хотите, чтобы сделать его немного легче использовать вы можете обернуть его в функции:

function deleteThing(thingToDelete){ 
    delete $scope.items[0].child.splice(thingToDelete,1); 
} 

, а затем просто сделать:

deleteThing(2); 

в удалите элемент с индексом 2.

+0

На самом деле это не ответ на вопрос. – trincot

+0

Проблема заключается не в индексе, а о пути удаления в json, который должен быть добавлен или, может быть, в более эффективном подходе, а не в добавлении, что не кажется правильным. – sharathChandra

+0

Концепция в этом ответе будет прекрасно работать с рекурсией, которую вы говорите, что вы все равно делаете, чтобы пересечь объект. Вы не хотите использовать eval со строкой, которая открывает целый ряд проблем. Существуют и другие опции, такие как Object.keys для итерации свойств объектов. – ste2425

Смежные вопросы