在数组上使用hasOwnProperty()

时间:2016-10-02 22:36:53

标签: javascript sorting hasownproperty

我可以在数组上使用hasOwnProperty()吗?我有这个rgba值数组:

colors = [[240,120,120,255],[125,222,111,255],[9,56,237,255],[240,120,120,255],[240,120,120,255],[240,120,120,255]]

我想创建一个对象,按照它们在数组中的频率顺序对它们进行排序。我正在尝试各种各样的事情。

首先我想用以下方法将数组转换为对象:

function toObject(arr) {
  var rv = {};
  for (var i = 0; i < arr.length; ++i){
    rv[i] = arr[i];
    }
    //console.log('the array is now this ', rv)
    return rv;
}

但是返回的内容如下:

 {0:[240,120,120,255],1:[125,222,111,255],2:[9,56,237,255],3:[240,120,120,255],4:[240,120,120,255],5:[240,120,120,255]}

所以我想知道我是否可以像这样调用hasOwnProperty?

  function reduceColors(passedArray){
          var empty = {}
          return passedArray.filter(function(item){
          return empty.hasOwnProperty(item["value"])
           })
        }

2 个答案:

答案 0 :(得分:1)

您可以使用散列。 使用散列,您可以对具有相同顺序的相同值的数组进行分组,并且可以计算它们的频率。

以下是一个例子:

&#13;
&#13;
var colors = [[240,120,120,255],[125,222,111,255],[9,56,237,255],[240,120,120,255],[240,120,120,255],[240,120,120,255]];


var hashed = [];

colors.forEach(function(arr){
    var id = hash(arr);
    var contains = hashed.find(v => v.id == id);
    if(contains){
        contains.count++;
    }else{
        hashed.push({id:id, color:arr , count:1});
    }
});

hashed.sort(function(a,b){return b.count - a.count;})

console.log(hashed);

function hash(arr){
  var hash = "#";
  arr.forEach(function(v){
     hash+=v.toString(16);
  });
  return hash;
}
&#13;
&#13;
&#13;

在这个例子中,我通过将rgba值转换为十六进制数来创建哈希值,更好的解决方案是将它们存储起来(十六进制),这样你就可以得到一维数组而不是一个数组二维数组。

答案 1 :(得分:0)

您可以使用for循环,Array.prototype.filter()Array.prototype.every(),严格相等运算符来检查colors中的每个数组是否包含{{1}内的兄弟数组的每个元素在相同的索引;将每个匹配的兄弟数组连接到输出数组

colors