我有一种情况,我有3个不同的数组,其中包含非常不同的对象数量。我已经阅读了很多关于此的问题和博文,但我仍然不确定何时使用什么。
PS!我最大的问题是我需要迭代并推送(适合数组),同时查找是否存在于数组中并删除(更合适对象)。 不需要特定订单。
我无法在array1
和array1clicked
中同时拥有相同的对象
因为他们应该采取不同的行动。
什么时候最好使用对象和我的示例中的数组?我应该用object替换什么以及什么应该作为数组?我很确定它中的对象数量也很重要,对吗?
我目前的代码:
//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
}
答案 0 :(得分:6)
您似乎想要一个包含这些操作的数据结构:
对于数组,问题是搜索和删除(使用重建索引)很慢。
对于对象,问题是属性名称只能是字符串。
完美的结构是一套。
var s = new Set();
s.add(123); // insert
s.has(123); // search
s.delete(123); // delete
s.values(); // iterator
答案 1 :(得分:0)
在你的情况下,我认为你必须只使用数组。
在常见的情况下,您可以使用object来保留引用并将一些值推入其中,但是如果您想迭代它,我认为您必须使用Array。