javascript - 测试对象数组中的值

标签 javascript jquery arrays

我正在动态构建一个对象数组,使用的过程可以归结为如下:

//Objects  Array
var objects = [];

//Object Structure
var object1 =  {"id":"foobar_1", "metrics":90};
var object2 = {"id":"some other foobar",  "metrics":50};
objects[0] = object1;
objects[1] = object2;

(郑重声明,如果您能想出一种更好的方法来动态嵌套数据,以便我可以使用 objects[i].id 访问它,我也洗耳恭听!)

最终将会有比上面更多的逻辑在发挥作用,但它只是还没有写出来。只要说“object1”和“object2”部分实际上位于迭代器中就足够了。

在该迭代器内,我想在将另一个对象添加到数组之前检查 ID 是否存在。例如,如果我已经有一个 ID 为 "foobar_1" 的对象,我只想增加其 "metrics",而不是将新成员推送到数组中值。

如果我不处理对象数组,我可以使用 inArray 来查找“foobar_1”(一个 jQuery 实用程序)。但这不会研究对象的值。在我看来,我有两个选择:

  1. 保留一个仅包含 ID 的单独简单数组。因此,我不是仅仅依赖 objects 数组,而是简单地检查 inArray (或普通的 JS 等效项)是否有一个仅用于此目的的简单“objectIDs”数组。

  2. 迭代我现有的数据对象,并将我的“foobar_1”针与每个objects[i].id干草堆进行比较

我觉得#1 肯定更高效,但我不禁想知道我是否缺少一个可以为我完成这项工作的功能。我错过了#3、4 或5 个选项! CPU 消耗有些重要,但我也对那些使代码不那么冗长的函数感兴趣,无论它们是否更具循环效率。

最佳答案

我建议切换到对象而不是数组:

var objects = {};
objects["foobar_1"] = {metrics: 90};
objects["some other foobar"] = {metrics: 50};

然后,要添加唯一的新对象,您可以这样做:

function addObject(id, metricsNum) {
    if (!(id in objects)) {
        objects[id] = {metrics: metricsNum};
    } 
}

要迭代所有对象,您可以这样做:

for (var id in objects) {
    // process objects[id]
}

这可以让您非常有效地查找给定的 ID 是否已在您的列表中。它唯一没有提供数组之前提供给您的是对象的特定顺序,因为对象的键没有任何特定的顺序。

关于javascript - 测试对象数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688501/

相关文章:

javascript - 在调用 FB.init() 之前调用 FB.getLoginStatus()

javascript - 如何遍历一系列问题并将其存储在一系列用户输入中?

arrays - 在 swift Array 中删除对象的更好方法是什么

javascript - 如果页面上存在 div 元素,则隐藏其他元素

javascript - React - 使用多个数组进行映射

javascript - mdl-stepper javascript 和 HTML

c++ - 将多维数组传递给 C++ 中的函数

javascript - 更新 Electron 和changin Node 后的错误积分为true

jquery - 如果我在提交按钮上放置脚本,Internet Explorer 将不会回发表单

javascript - 切换元素组中事件元素的样式