Как посчитать вхождение каждого ключа в массив объектов? - PullRequest
0 голосов
/ 11 декабря 2018

Скажем, у меня есть массив объектов, таких как:

[{"taco":"","burrito":"","scone":"","beans":"true"}, 
{"taco":"true","burrito":"","scone":"true","beans":""}, 
{"taco":"true","burrito":"","scone":"","beans":""}, 
{"taco":"true","burrito":"","scone":"","beans":"true"}]

Мне нужно подсчитать вхождение каждого элемента и вернуть его в массиве

[3, 0, 1, 2]

любые идеи будутспасибо!

Я попытался

var a = datasets.reduce(function (item, index) {
    if (typeof item[index] == 'undefined') {
        item[index] = 1;
    } else {
        item[index] += 1;
    }
    return item;
}, {});

, но ничего подобного не получилось, поэтому я попытался преобразовать его в json, а затем удалить все пары ключ: значение без значения.считая оставшиеся, но не добившись успеха либо

function tableToJson(table) {
    var data = [];

    var headers = [];
    for (var i=0; i < table[0].rows[0].cells.length; i++) {
        headers[i] = table[0].rows[0].cells[i].innerHTML.toLowerCase().replace(/ /gi,'');
    }

    for (var i=1; i< table[0].rows.length; i++) {

        var tableRow = table[0].rows[i];
        var rowData = {};

        for (var j=0; j<tableRow.cells.length; j++) {
            rowData[ headers[j] ] = tableRow.cells[j].innerHTML;
        }
        data.push(rowData);
    }
    return data
    }

    function removeEmpty(jsonObj) {
      var newObj = Object.getOwnPropertyNames(jsonObj);
      for (var i = 0; i < newObj.length; i++) {
        var value = newObj[i];
        if (jsonObj[value] === null || jsonObj[value] === undefined) {
          delete jsonObj[value];
        }
      }
    }

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вы можете попробовать это

Вы можете сделать это с помощью reduce().

Сначала я проверяю, что object property of current element, если он уже находится в output object.Если он присутствует, я проверяю значение current element property.если это правда, тогда я увеличиваю свойство output object на 1.

Если object property of current element не доступно в выходных данных, чем я проверяю длязначение current element property.если это правда, я назначаю свойство выходного объекта со значением 1.если ложно, я назначаю свойство выходного объекта с 0.

let obj = [{"taco":"","burrito":"","scone":"","beans":"true"}, 
{"taco":"true","burrito":"","scone":"true","beans":""}, 
{"taco":"true","burrito":"","scone":"","beans":""}, 
{"taco":"true","burrito":"","scone":"","beans":"true"}]

let op = obj.reduce((output,current)=>{
  for(let key in current){
    if( output[key] ){
      if( current[key] ) output[key]+=1;
    } else {
      if( current[key] ){
        output[key] = 1;
      } else{
        output[key] = 0;
      }
    }
  }
  return output;
},{})

console.log(op);
0 голосов
/ 11 декабря 2018

Вы можете циклически проходить по массиву, а затем циклически переключаться между ключами каждого объекта.Затем увеличьте key countObject, если он уже существует, или присвойте ему ноль.

Это динамическое значение.Даже если у одного объекта есть лишние key, он их посчитает.Это не предполагает, что все элементы массива имеют одинаковые ключи.

var array = [
 {"taco":"","burrito":"","scone":"","beans":"true"}, 
 {"taco":"true","burrito":"","scone":"true","beans":""}, 
 {"taco":"true","burrito":"","scone":"","beans":""}, 
 {"taco":"true","burrito":"","scone":"","beans":"true"} 
]

var countObject = {};

array.forEach(item => {
    Object.keys(item).forEach(key => {
        if (item[key] === "true")
            countObject[key] = countObject[key] + 1 || 1
        else
            countObject[key] = countObject[key] || 0
    })
})

console.log(countObject); // get the key and count pair
console.log(Object.values(countObject)); // get the counts in an array
0 голосов
/ 11 декабря 2018

Попробуйте это:

var data = [{
      taco: "",
      burrito: "",
      scone: "",
      beans: "true"
    },
    {
      taco: "true",
      burrito: "",
      scone: "true",
      beans: ""
    },
    {
      taco: "",
      burrito, "true",
      scone: "",
      beans: "",
      },  {
        taco: "true",
        burrito: "",
        scone: "",
        beans: "true"
      }]

    var total = [0, 0, 0, 0];

    data.forEach(function(obj) {
      if (obj.taco) {
        total[0]++;
      }
      if (burrito) {
        total[1]++;
      }
      if (obj.scone) {
        total[2]++;
      }
      if (obj.beans) {
        total[3]++;
      }
    })

    console.log(total)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...