Sort index of array based on value [closed] - javascript

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));

Related

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.

Filter arrays inside array [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
I have an array that contains arrays and objects, and I want a function to filter only the arrays inside the initial array, example:
const myArray = [
[1,2,4],
{name:'john'},
[2,4,5],
{name: 'jack'}
]
And then get a variable that only contains [1,2,4] and [2,4,5]
Thanks!
You can use filter to return values based on a condition. Below uses the .isArray method of Array class to determine if a value is an array.
const arrays = myArray.filter(Array.isArray)
Example:
const myArray = [
[1,2,4],
{name:'john'},
[2,4,5],
{name: 'jack'}
]
const arrays = myArray.filter(Array.isArray)
console.log(arrays)
Try using:
const myArray = [
[1,2,4],
{name:'john'},
[2,4,5],
{name: 'jack'}
]
let arr= myArray.filter((elem)=>{
return Array.isArray(elem);
})
Array.prototype.filter returns a new array. It executes a callback for every item in the array. The first argument of the first callback is the first item, the first argument of the second callback is the second item etc. If the callback returns a truthy value, the item that was the first argument of that callback is added to the new array.
Array.isArray(arg) returns a boolean based on if the argument is an Array.
const myArray = [
[1,2,4],
{name:'john'},
[2,4,5],
{name: 'jack'}
]
function untitled(array) {
return array.filter((item) => Array.isArray(item));
}
answer = untitled(myArray);
console.log(answer);
myArray.filter(v=>Array.isArray(v))

How to count the frequencies of elements in an array [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 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);

two javascript arrays and display result with count [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 9 years ago.
Improve this question
Hi I have two javascripts arrays and I want to display result in below way (specified in desired result table):
array1 = ( '2013/01/02','2013/01/03','2013/01/02','2013/01/02' );
array2 = ( 'a' ,'b', 'c', 'a' );
I need result in below format but in HTML page:
2013/01/02 2013/01/03
a 2 0
b 0 1
c 1 0
hints: array1 1st value link with array2 1st value, array1 2nd value link with array2 2nd value ...
How many 2013/01/02 and a ? if we compare two arrays ? count is 2 but should display in matrix
To count unique values use:
array1 = [ '2013/01/02','2013/01/03','2013/01/02','2013/01/02' ];
array2 = [ 'a' ,'b', 'c', 'a' ];
var counts = {};
for (var i = 0; i < array1.length; i++) {
if (!counts[array1[i]])
counts[array1[i]] = {};
if (counts[array1[i]][array2[i]])
counts[array1[i]][array2[i]] += 1;
else
counts[array1[i]][array2[i]] = 1;
}
DEMO.
Using two foreach loops you get your desired table (JQuery.each DEMO).

Categories

Resources