2017-01-20 5 views
1

У меня возникли проблемы с обновленным найденным объектом. Я также пробовал Find object by id in an array of JavaScript objects и Get JavaScript object from array of objects by value or propertyПолучить индекс объекта объекта массива по свойству и значению

Пожалуйста, помогите.

// Create array 
 
var schedule = []; 
 
schedule.push({ 'action': 'add', 'id': 1 }); 
 
schedule.push({ 'action': 'update', 'id': 2 }); 
 

 
// Find array object 
 
var searchId = 2; 
 
var foundObj = schedule.filter(function(obj) { return obj.id == searchId; }) 
 

 
// Update found object 
 
if (typeof foundObj !== 'undefined') { 
 
    var newId = 3; 
 
    schedule[foundObj] = {'action': 'delete', 'id': newId }; 
 
} 
 

 
console.log(schedule);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

foundObj будет массив, а не индекс, что вы хотите? –

+0

Мой вопрос был скрыт внутри фрагмента кода. =) –

ответ

3

Используйте поиск, чтобы получить объект, а затем использовать индекс найденного объекта, чтобы заменить элемент

// Create array 
 
var schedule = []; 
 
schedule.push({ 'action': 'add', 'id': 1 }); 
 
schedule.push({ 'action': 'update', 'id': 2 }); 
 

 
// Find array object 
 
var searchId = 2; 
 
var foundObj = schedule.find(function(obj) { return obj.id == searchId; }) 
 
// Update found object 
 
if (typeof foundObj !== 'undefined') { 
 
    var newId = 3; 
 
    schedule[schedule.indexOf(foundObj)] = {'action': 'delete', 'id': newId }; 
 
} 
 

 
console.log(schedule);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

Вы уже отфильтровали элемент, чтобы его можно было обновить напрямую, а не переименовывать его индекс –

+1

да, потому что его ссылка прошла :) –

+0

Да, это правда. Но по крайней мере вы демонстрируете 2 возможных решения –

1

Вы можете использовать Array#find и проверки и обновления свойства.

var schedule = [{ action: 'add', id: 1 }, { action: 'update', id: 2 }], 
 
    searchId = 2, 
 
    newId = 3, 
 
    foundObj = schedule.find(function(obj) { return obj.id == searchId; }) 
 

 
if (foundObj) { 
 
    foundObj.action = 'delete'; 
 
    foundObj.id = newId; 
 
} 
 

 
console.log(schedule);