2017-01-20 14 views
1

見つかったオブジェクトの更新に問題があります。 私も試しましたFind object by id in an array of JavaScript objectsGet 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

yesを再検索するのではなく、直接更新することができます。 –

+0

Yup、そうですが - 少なくとも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);

関連する問題