2016-10-10 6 views
-1

У меня есть некоторые данные, и одно из полей называется тегами, и в них иногда содержится массив значений.Значения счетчика Javascript для массива

Что мне нужно сделать, так это рассчитать эти значения и получить их в отдельных переменных.

Вот данные:

myObject = [ 

{ 
"object": [ 
     { 
      "id": "8062", 
      "name": "name 1" 
      "tags": ['tag1','tag2'], 
      "desc": "desc 1", 
     }, 
     { 
      "id": "8061", 
      "name": "name 2" 
      "tags": ['tag 2', 'tag 3'], 
      "desc": "desc 2" 

     }, 
     { 
     "id": "8060", 
     "name": "name 3" 
     "tags": ['tag 2', 'tag 3'], 
     "desc": "desc 3" 

     } 
    ] 
} 

]; 

И это то, что мне нужно, чтобы в конечном итоге с:

tag1_count = 1; 
tag2_count = 3; 
tag3_count = 2; 

Как я могу это сделать?

+3

Итерации через массив и продолжение. Когда у вас возникает конкретная проблема - вернитесь с ней – k102

ответ

1

Вы можете использовать reduce() как это и вернуть объект.

var myObject = [{ 
 
    "object": [{ 
 
    "id": "8062", 
 
    "name": "name 1", 
 
    "tags": ['tag1', 'tag2'], 
 
    "desc": "desc 1", 
 
    }, { 
 
    "id": "8061", 
 
    "name": "name 2", 
 
    "tags": ['tag 2', 'tag 3'], 
 
    "desc": "desc 2" 
 
    }, { 
 
    "id": "8060", 
 
    "name": "name 3", 
 
    "tags": ['tag 2', 'tag 3'], 
 
    "desc": "desc 3" 
 

 
    }] 
 
}]; 
 

 
var result = myObject[0].object.reduce(function(r, e) { 
 
    e.tags.forEach(function(t) { 
 
    var key = t.replace(/ /g, '') + '_count' 
 
    r[key] = (r[key] || 0) + 1; 
 
    }) 
 
    return r; 
 
}, {}) 
 

 
console.log(result)

1

myObject = [{ 
 
    "object": [{ 
 
    "id": "8062", 
 
    "name": "name 1", 
 
    "tags": ['tag1', 'tag2'], 
 
    "desc": "desc 1" 
 
    }, { 
 
    "id": "8061", 
 
    "name": "name 2", 
 
    "tags": ['tag2', 'tag3'], 
 
    "desc": "desc 2" 
 

 
    }, { 
 
    "id": "8060", 
 
    "name": "name 3", 
 
    "tags": ['tag2', 'tag3'], 
 
    "desc": "desc 3" 
 

 
    }] 
 
}]; 
 

 
var map = {}; 
 

 
myObject[0].object.forEach(function(object) { 
 
    object.tags.forEach(function(tag) { 
 
    if(map[tag] === undefined){ 
 
     map[tag] = 1; 
 
    }else{ 
 
     map[tag] = map[tag] + 1; 
 
    } 
 
    }); 
 
}); 
 

 
console.log(map);

0

Просто итерацию через массив, используя for-of петлю, получить каждую длину tags собственности и хранения каждого требуемого значения для различных переменных.

var i = 1; 
for (obj of myObject[0].object) { 
    window["tag" + i + "_count"] = obj.tags.length; // e.g. tag1_count = 2, tag2_count = 3, etc... 
    i++; 
} 
Смежные вопросы