【问题标题】:Advice on the best way to collect values in an array关于在数组中收集值的最佳方法的建议
【发布时间】:2014-10-21 10:32:20
【问题描述】:

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

首先我要获取每个元素的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;
}

现在我的问题是, 建议如何创建数组?直接在 $ ("*") 内部还是在我想的专用函数中?我还需要不止一次删除新数组“clean”中的重复项以及 rgb 值,我还会给出该值在原始数组中的次数。 一些示例代码?

【问题讨论】:

  • 为什么首先要添加重复项?
  • 您可能应该在首先将值添加到数组中之前检查重复项。
  • 有点,但在我看来,使用 $ (*) 之外的重复值控制可以提高速度方面的性能
  • 使用属性选择器 - var colorArray= $('[background-color]').attr("background-color");

标签: javascript jquery arrays dom


【解决方案1】:

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

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/

【讨论】:

  • 我也会这样做$('body').find('*'),以便忽略中的元素。
  • @LShetty 是的,我故意为 OP 留下了一些调优工作;)
【解决方案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来访问数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多