【问题标题】:Get index of array's object item by property and value通过属性和值获取数组对象项的索引
【发布时间】:2023-04-08 15:47:02
【问题描述】:

我在更新找到的对象时遇到问题。 我也试过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>

【问题讨论】:

  • foundObj 将是数组而不是索引你想要什么?
  • 我的问题隐藏在代码 sn-p 中。 =)

标签: javascript jquery arrays javascript-objects


【解决方案1】:

使用 find 获取对象,然后使用找到的对象的索引替换元素

// 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>

【讨论】:

  • 你已经过滤了元素,所以你可以直接更新它而不是重新搜索它的索引
  • 是的,没错 - 但至少你展示了两种可能的解决方案
【解决方案2】:

您可以使用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);

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2011-11-02
    • 2012-12-07
    • 2020-05-21
    相关资源
    最近更新 更多