何时使用对象以及何时使用数组

When to use object and when array

本文关键字:何时使 数组 对象      更新时间:2023-09-26

我有一个情况,我有 3 个不同的数组,其中的对象数量非常不同。我已经阅读了许多关于此的问题和博客文章,但我仍然不确定何时使用什么。

嗡!我最大的问题是我需要迭代和推送(非常适合数组),还要查找数组中是否存在并删除(更适合对象)。不需要特定订单。

我不允许在array1array1clicked中使用相同的对象因为他们应该执行不同的操作。


在我的示例中,什么时候最好使用对象和何时使用数组?我应该用对象替换什么,什么应该保留为数组?我很确定其中的对象数量也很重要,对吧?


我当前的代码:

//Objects in arrays are literally custom {objects} with custom prototypes and html
var array1 = [ 20 objects ];
var array1clicked = [];
var array2 = [ 250 objects ];
var array2clicked = [];
var array3 = [ 50 000 objects ];
var array3clicked = [];
//Each object in arrays has event attached
objecthtml.click(function() {
    //Add to clicked array
    array1clicked.push(thisobject);
    //Remove from initial array
    var index = array1.indexOf(thisobject);
    if (index > -1) {
        array1.splice(index, 1);
    }
}
//Same with array2 and array3 objects

//Iterations on different conditions
var array1count = array1.length;
var array1clickedcount = array1clicked.length;
//Same with array2 and array3
if(condition1) {
   for(a = 0; a < array1count; a++) {
       array1[a].div.style.visibility = 'hidden';
   }
   //Same with array2 and array3 objects
   for(a = 0; a < array1clickedcount; a++) {
       array1clicked[a].div.style.visibility = 'visible';
   }
   //Same with array2clicked and array3clicked objects
}
else if(condition2) {
   for(a = 0; a < array1count; a++) {
       array1[a].div.style.visibility = 'visible';
   }
   //Same with array2 and array3 objects
   for(a = 0; a < array1clickedcount; a++) {
       array1clicked[a].div.style.visibility = 'hidden';
   }
   //Same with array2clicked and array3clicked objects
}

您似乎需要一个具有以下操作的数据结构:

  • 迭 代
  • 插入
  • 删除
  • 搜索

对于数组,问题在于搜索和删除(使用重新索引)很慢。

对于对象,问题是属性名称只能是字符串。

完美的结构是一套。

var s = new Set();
s.add(123); // insert
s.has(123); // search
s.delete(123); // delete
s.values(); // iterator

就您而言,我认为您只需要使用数组。

在通常情况下,您可以使用 object 来保留引用并将一些值推送到其中,但如果你想迭代这个,我认为你必须使用 Array。