有关在数组中收集值的最佳方法的建议

时间:2014-10-21 10:32:21

标签: javascript jquery arrays dom

我需要保存网站页面中元素的所有颜色值,并将它们放在数据库中。我以为我会这样做:

首先我要去拾取每个元素的rgb值

$("*").each(function(e){
  createColorArray($(this).css('backgroundColor'));
});

然后在函数createColorArray中将所有传递的值存储到数组中

function createColorArray(rgbColor)
{
  //Create rgb array
}

最后从我的数组中删除重复的项目

function removeDoupe(ar) {
var temp = {};
for (var i = 0; i < ar.length; i++)
    temp[ar[i]] = true;
var r = [];
for (var k in temp)
    r.push(k);
return r;
}

现在我的问题是, 如何建议创建阵列?直接在$(&#34; *&#34;)里面,或者在我想的专用函数中?我还需要在新数组中删除重复项#34; clean&#34;除了rgb值,我还会给出原始值的值。 一些示例代码?

2 个答案:

答案 0 :(得分:4)

正如我在评论中提到的,为什么不早点检查重复?一个简单的例子:

var colors = [];

$('*').each(function(i, el){    

    var $element = $(el),
        color = $element.css('background-color');

    if(!~$.inArray(color, colors))
        colors.push(color);
});

console.log(colors);

http://jsfiddle.net/sL9oeywk/

答案 1 :(得分:2)

执行此操作的最佳方法是在您进行操作时完成所有操作。这是你可能做到的一种方式:

var colors = new Array();
var tempColors = {};

$(".colors").each(function(){
    var c = $(this).val();
    // check if the color exists without looping
    if(typeof tempColors[c] == "undefined"){
        // if it doesn't, add it to both variables.
        tempColors[c] = true;
        colors.push(c);
    }
});

这将导致两个变量:一个是您不必循环查找以前是否定义它的对象,一个是您使用标准javascript推送的颜色数组。

如果你没有重复使用它,你不应该把它变成一个专用的功能,但你可以把它变成这样的对象:

var colors = function(){
    var self = this;
    self.array = new Array();
    // this is a dedicated check function so we don't need separate variables.
    // returns true if the color exists, false otherwise
    self.check = function(color){
        for(var i =0; i < self.array.length; i++){
            if(self.array[i] === color) return true;
        }
        return false;
    }
    self.add = function(color){
        // use the check function, if it returns false, the color does not exist yet.
        if(!self.check(color)){
            self.array.push(c);
        }
    }
}

然后,您可以使用var colorlist = new colors();实例化颜色列表,并使用colorlist.add("dd0300")添加颜色。访问阵列可以通过请求colorlist.array来完成。