Reputation: 45
I have an array like this (arr), how do I want to get an array like (arr2)? Where the 'start' and 'end' elements are fixed values。
Original array:
var arr = [
{form: 'start', to: 'task-1'},
{form: 'start', to: 'task-4'},
{form: 'task-1', to: 'task-2'},
{form: 'task-2', to: 'end'},
{form: 'task-1', to: 'task-3'}
]
console.log(arr)
Expected array:
var arr2 = [
{form: 'start', to: 'task-1'},
{form: 'task-1', to: 'task-2'},
{form: 'task-2', to: 'end'},
]
console.log(arr2)
Upvotes: 2
Views: 71
Reputation: 11001
Recursively find object and push to result array. Here is sample code.
var arr = [
{form: 'start', to: 'task-1'},
{form: 'start', to: 'task-4'},
{form: 'task-1', to: 'task-2'},
{form: 'task-2', to: 'end'},
{form: 'task-1', to: 'task-3'}
]
const getTo = search => arr.find(x => x.form === search).to;
let form = 'start';
let to = '';
const res = [];
while (to !== 'end') {
to = getTo(form);
res.push({form, to});
form = to;
}
console.log(res)
Upvotes: 1
Reputation: 1402
Here is it.
var arr = [
{form: 'start', to: 'task-1'},
{form: 'start', to: 'task-4'},
{form: 'task-1', to: 'task-2'},
{form: 'task-2', to: 'end'},
{form: 'task-1', to: 'task-3'}
]
// console.log(arr);
const obj = arr.reduce((accum, value) => {
const formId = value.form;
const to = value.to;
if (!accum[formId]) {
accum[formId] = to;
}
return accum;
}, {});
const arr2 = Object.entries(obj).map(([key, value]) => {
return {
form: key,
to: value
}
});
console.log(arr2);
Upvotes: 0