Массив Js, определяющий количество повторяющихся объектов

#javascript #arrays #count #indexof

Вопрос:

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

У меня более 10 000 результатов, и я не могу изменить исходный файл .csv, и он должен быть простым js.

Вопрос в том,:

Я пытаюсь извлечь количество каждого ответа, которых 3. Например, Сколько раз «{Q17_Communication:» 2″} » отображается в списке из 10 000 ?

Формат ниже…

 0: Object {Q17_Communication: "Has your organization communicated a vision or plan for post-pandemicnwork?"}
1: Object {Q17_Communication: ""}
2: Object {Q17_Communication: ""}
3: Object {Q17_Communication: "{"ImportId":"QID43"}"}
4: Object {Q17_Communication: "1"}
5: Object {Q17_Communication: "2"}
6: Object {Q17_Communication: "3"}
7: Object {Q17_Communication: "1"}
8: Object {Q17_Communication: "1"}
9: Object {Q17_Communication: "2"}
10: Object {Q17_Communication: "2"}
11: Object {Q17_Communication: "1"}
12: Object {Q17_Communication: "1"}
13: Object {Q17_Communication: "3"}
14: Object {Q17_Communication: "1"}
15: Object {Q17_Communication: "3"}
16: Object {Q17_Communication: "3"}
17: Object {Q17_Communication: "2"}
18: Object {Q17_Communication: "1"}
...
]
 

Комментарии:

1. тогда в чем твой вопрос? как разобрать? алгоритм?

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

3. Вот соответствующая демонстрация: crockford.com/pop.html

Ответ №1:

Что-то вроде этого может сработать:

 const objects = [
  {Q17_Communication: "1"},
  {Q17_Communication: "2"},
  {Q17_Communication: "2"},
  {Q17_Communication: "3"},
  {Q17_Communication: "3"},
  {Q17_Communication: "3"},
];

const counts = {};

objects.forEach((value) => {
  if (!counts[value.Q17_Communication]) {
    counts[value.Q17_Communication] = 0;
  }
  
  counts[value.Q17_Communication]  ;
});

console.log(counts); 

Ответ №2:

Используя array.reduce() метод, вы можете легко достичь того, чего хотите .

Смотри =>

Массив

 let array = [{
  Q17_Communication: "Has your organization communicated a vision or plan for post-pandemicnwork?"
},
  {
    Q17_Communication: ""
  },
  {
    Q17_Communication: ""
  },
  {
    Q17_Communication: "{"ImportId":"QID43"}"
  },
  {
    Q17_Communication: "1"
  },
  {
    Q17_Communication: "2"
  },
  {
    Q17_Communication: "3"
  },
  {
    Q17_Communication: "1"
  },
  {
    Q17_Communication: "1"
  },
  {
    Q17_Communication: "2"
  },
  {
    Q17_Communication: "2"
  },
  {
    Q17_Communication: "1"
  },
  {
    Q17_Communication: "1"
  },
  {
    Q17_Communication: "3"
  },
  {
    Q17_Communication: "1"
  },
  {
    Q17_Communication: "3"
  },
  {
    Q17_Communication: "3"
  },
  {
    Q17_Communication: "2"
  },
  {
    Q17_Communication: "1"
  }];
 

Использование константы

 const count =  array.reduce((total,object)=>{
  // condition 
   object.Q17_Communication === "2" ? total  = 1 : null;
   return total;
},0);
console.log(count)
 

Использование Функции

 function countIt(value){
  const count =  array.reduce((total,object)=>{
    object.Q17_Communication === value ? total  = 1 : null;
    return total;
   },0);
   return count;
}


console.log(countIt("2"))
 

Использование методов массива лучше всего использовать вместо обычных для циклов..

Комментарии:

1. @Andy Davies Этот ответ помогает вам решать проблемы ? Я включил современный метод, чтобы вы могли узнать больше !

Ответ №3:

 function count(obj) {  //obj is your array
   let answerCount = [0, 0, 0, 0];
   for (let i = 0; i < obj.length; i  ) {
      answerCount[parseInt(obj[i]['Q17_Communication'])]  ;
   }
   return answerCount;
}
 

Поместите свой массив в функцию и верните другой массив (счетчик ответов) с указанием количества появлений каждого ответа, просто вызовите функцию следующим образом

 let myCount = count(myarray);   //put your array

console.log("Number of '1' : "   myCount[1]);
console.log("Number of '2' : "   myCount[2]);
console.log("Number of '3' : "   myCount[3]);