How to count the frequencies of elements in an array [closed] - javascript

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 4 years ago.
Improve this question
Assuming you have an array x = [1, 1, 2, 2, 2, 3], and you had to output a sorted array of objects containing a key-value pair (where the key represents the element, and the value the frequency) like:
y = [
{
2: 3
},
{
1: 2
},
{
3: 1
}
]
The resulting array should be sorted by the values.
What would be the best way of doing this?

You can create a temporary object and do simple .forEach and check if current number exists in object as key, if true plus 1 to the value, otherwise create that key, then with simple .map add all key value pairs in separate object in new array
const x = [1, 1, 2, 2, 2, 3];
const k = {};
x.forEach(v => {
if(k[v]) {
k[v] +=1;
} else {
k[v] = 1;
}
});
const y = Object.keys(k).sort((t,c) => k[c] - k[t]).map(key => ({[key]: k[key]}));
console.log(y);

Related

How to change map array to comparable numbers? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
Project contains 7 cards , each card has own ID. I selected this ID .
I have data in JS file , this data has 7 objects with ID ,
I want compare card ID with data ID ,
IF THIS IDs WILL MATCH , THEN WILL PRINT IT .
console.log show me this
3 = card ID
(7) [1, 2, 3, 4, 5, 6, 7] = data file shows me array
How to change this array , I could compare card ID ?
const cardbody = document.querySelectorAll('.card')
cardbody.forEach(function(btn) {
console.log(btn) // it shows me current card
btn.addEventListener('click', function(e) {
const bt = e.currentTarget.dataset.id
console.log(bt) // 3
// data from JS file this return arrays
const dataid = cabins.map(function(item) {
return item.id
})
console.log(dataid) //(7) [1, 2, 3, 4, 5, 6, 7]
if(dataid === bt ) {
console.log('red')
}
})
})
If you just need to know if the bt is in any of the id properties, use the some() method. You don't need to create an array first.
cardbody.forEach(function(btn) {
console.log(btn) // it shows me current card
btn.addEventListener('click', function(e) {
const bt = e.currentTarget.dataset.id
console.log(bt) // 3
if (cabins.some(item => item.id == bt)) {
console.log('red')
}
})
})
const arr = [1, 2, 3, 4, 5, 6, 7];
const id = 3;
// existance
if (arr.includes(id)) {
console.log(`${id} exists`);
}
// findIndex
if (arr.indexOf(id) >= 0) {
console.log(`${id} found at arr[${arr.indexOf(id)}]`);
}

Split an array into two Parts [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 2 years ago.
This post was edited and submitted for review 1 year ago and failed to reopen the post:
Original close reason(s) were not resolved
Improve this question
How can we split or divide an array into two new arrays?
SingleARR = [7,5,6,4,3,2,4,5,4,2,8,8];
one array should have values that don't repeat
and the other has values that repeat. Moreover, both new arrays should have different elements from each other.
First, count the frequencies. Then filter it by the frequency if it is one then that does not repeat and push it into one array. Then again filter it by the frequency, if it is greater than 1 then it repeats and pushes
let a = [7, 5, 6, 4, 3, 2, 4, 5, 4, 2, 8, 8];
let ret = a.reduce((p, c) => {
if (!p[c]) p[c] = 1;
else p[c] += 1;
return p;
}, {});
let x = [];
let y = [];
console.log(ret);
for (prop in ret) if (ret[prop] === 1) x.push(+prop);
for (prop in ret) if (ret[prop] > 1) y.push(+prop);
console.log(x);
console.log(y);
it into another array.

Loop multiple lists based on their length [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 2 years ago.
Improve this question
In my code I have 6 lists of objects of different sizes.
I need to go through them all in a specific order, from the smallest list to the largest.
var list_1 = [...] // length 24
var list_2 = [...] // length 4
var list_3 = [...] // length 3
var list_4 = [...] // length 4
var list_5 = [...] // length 11
var list_6 = [...] // length 2
// Need code here for loop each list in order asc
list_6.forEach(...) // length 2
list_3.forEach(...) // length 3
list_2.forEach(...) // length 4
list_4.forEach(...) // length 4
list_5.forEach(...) // length 11
list_1.forEach(...) // length 24
Does anyone have a simple solution ? Thanks
You could add the lists in an array, sort it and perform the loop
[list, list2, ...]
.sort((a, b) => a.length - b.length)
.forEach(array => array.forEach(...))
Put the lists into another list and sort them.
const list1 = [1, 2, 3, 4],
list2 = [1],
list3 = [1, 2, 3, 4, 5, 6, 7];
let listOfLists = [list1, list2, list3].sort((a, b) => a.length - b.length);
console.log(listOfLists);
listOfLists.forEach(list => {
list.forEach(itemInList => {
console.log(itemInList);
});
});
See StackBlitz example.

Sort index of array based on value [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 6 years ago.
Improve this question
I get the wrong index value when i am adding more than 10 values in my observable array, when i am trying to get current object like observableArray.indexOf(this). So i created new variable index value and generated like below example. But on enter i want to sort my observable array in descending order. So I want to do something like below example.
I have list of object with value like below
1,20
2,40
3,10
4,50
And I want result like
3,20
2,40
4,10
1,50
I want to sort my index value based on descending order of number in knockout observable.
Sort an mapped array based on value.
Find the index of value based on the index from sorted array.
var obj = [{
index: 1,
value: 20
}, {
index: 2,
value: 40
}, {
index: 3,
value: 10
}, {
index: 4,
value: 50
}];
var sortedArr = obj.map(function(el) {
return el.value;
}).sort(function(a, b) {
return b - a
});
var mapped = obj.map(function(el) {
var index = sortedArr.indexOf(el.value) + 1;
el.index = index;
return el;
});
console.log(JSON.stringify(mapped,null,4));

Sort array and return an array of indicies that indicates the position of the sorted elements with respect to the original elements (new) [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
I have this array
test = [3, 2, 2, 1];
I want to be able to get this array
result = [3, 1, 2, 0]
The idea is the same as: Javascript: Sort array and return an array of indicies that indicates the position of the sorted elements with respect to the original elements
but incrementing the position value every time there is two elements on "test" with the same value.
You can pass a comparison function to sort:
var test = [3, 2, 2, 1];
var result = [];
for(var i = 0; i != test.length; ++i) result[i] = i;
result = result.sort(function(u,v) { return test[u] - test[v]; })
console.log(result) // [ 3, 1, 2, 0 ]

Categories

Resources