将JavaScript数组拆分为较小的数组并获取每个值的频率

时间:2011-09-26 21:11:30

标签: javascript arrays

我有以下大数组:

var divs = [
    {class:'A', top:0,   left:0},
    {class:'B', top:50,  left:60},
    {class:'C', top:30,  left:10},
    {class:'D', top:100, left:180},
    {class:'E', top:80,  left:50},
    {class:'F', top:100, left:200},
    {class:'G', top:50,  left:80}
];

我想仅隔离top值。我尝试使用split(),但我可能没有正确使用它,因为没有按预期返回。

一旦top值被隔离到它们自己的较小数组中,我想迭代它并找到每个值的出现频率。

我能帮忙吗?

5 个答案:

答案 0 :(得分:2)

var divs = [
            {class:'A', top:0,   left:0},
            {class:'B', top:50,  left:60},
            {class:'C', top:30,  left:10},
            {class:'D', top:100, left:180},
            {class:'E', top:80,  left:50},
            {class:'F', top:100,  left:200},
            {class:'G', top:50,  left:80}
];
var topsy = {};
for(var i = 0, max = divs.length; i < max; i++){
    var a = divs[i];
    topsy[a.top] = (topsy[a.top] + 1) || 1;
}

此时,你将拥有一个包含所有顶部的topsy,其中键是顶部,值是它在那里的次数。要获得密钥列表,请说:

Object.keys(topsy);

Object.keys在IE中不起作用。 你最终会得到topsy =

{
    0: 1,
    30: 1,
    50: 2,
    80: 1,
    100: 2
}

然后你可以说

Object.keys(topsy);//[3,30,50,80,100]

您一次完成了分析和数组。

答案 1 :(得分:1)

您可以使用.map进行过滤,.forEach进行迭代,但旧浏览器都不提供这两种功能。

var freqs = {},
    tops = divs.map(function(value) {
               return value.top; // map the array by only returning each 'top'
           });

tops.forEach(function(value) {
    // iterate over array, increment freqs of this top
    // or set to 1 if it's not in the object yet
    freqs[value] = freqs[value] + 1 || 1;
});

// tops:  [0, 50, 30, 100, 80, 100, 50]
// freqs: {0: 1, 30: 1, 50: 2, 80: 1, 100: 2}

答案 2 :(得分:1)

您必须遍历数组,并将top值存储在临时变量中。选择变量为Array是明智的,因为数组可以很容易地循环。

var test = [];
for(var i=0; i<divs.length; i++){
    test.push(divs[i].top);
}
//test is an array which holds all value of "top"

答案 3 :(得分:1)

var divs = [
    {class:'A', top:0,   left:0},
    {class:'B', top:50,  left:60},
    {class:'C', top:30,  left:10},
    {class:'D', top:100, left:180},
    {class:'E', top:80,  left:50},
    {class:'F', top:100,  left:200},
    {class:'G', top:50,  left:80}
];

var tops = [];
for(var i = 0, l = divs.length; i < l; i++) {
    tops.push(divs[i].top);
};

tops; // [ 0, 50, 30, 100, 80, 100, 50 ]

答案 4 :(得分:1)

var divs = [
                {class:'A', top:0,   left:0},
                {class:'B', top:50,  left:60},
                {class:'C', top:30,  left:10},
                {class:'D', top:100, left:180},
                {class:'E', top:80,  left:50},
                {class:'F', top:100,  left:200},
                {class:'G', top:50,  left:80}
    ];

var divsTop = [];

for(var i in divs)
    divsTop.push({"class":divs[i].class,"top":divs[i].top});

您可以迭代并将每个(已修改的)对象推送到另一个数组。