const getMyObject = arr => {
// first compuate the half-length "lenBy2" of given array
const lenBy2 = Math.floor(arr.length / 2);
// return the "result" as an object
return Object
.fromEntries( // generate object from key-value pairs below
arr.map( // iterate "arr" to obtain key-value pairs
({ value }, idx) => ( // get the index "idx" and de-structure to access "value"
idx < lenBy2 // if index less than half-length "lenBy2"
? [ // return key-value pair as a 2-element array
value, // [ "banana", "yellow" ], for example
arr[idx + lenBy2]?.value
]
: [] // if index >= half-length, return empty array
)
).filter( // filter key-value pairs to retain only non-empty ones
x => x.length == 2
)
);
};
// below are steps only to generate results for various test cases
// the original array from the question
const array1 = [{value: 'banana'}, {value: 'apple'}, {value: 'yellow'}, {value: 'red'}];
// mismatched array where the fruit "orange" has no matching color
const array3 = [
{value: 'banana'}, {value: 'apple'}, {value: 'orange'},
{value: 'yellow'}, {value: 'red'}
];
// mismatched array where the color "orange" has no matching fruit
const array4 = [
{value: 'banana'}, {value: 'apple'},
{value: 'yellow'}, {value: 'red'}, {value: 'orange'}
];
// iterate over the various test case arrays &
// console.log the result
[array1, array2, array3, array4].forEach((arr, idx) =>
console.log(
`\n***---> test case ${idx + 1} <---***\n`,
'given array:
Here is an answer using the same logic provided in the comment. This has relevant descriptions to help understand better.
const getMyObject = arr => {
// first compuate the half-length "lenBy2" of given array
const lenBy2 = Math.floor(arr.length / 2);
// return the "result" as an object
return Object
.fromEntries( // generate object from key-value pairs below
arr.map( // iterate "arr" to obtain key-value pairs
({ value }, idx) => ( // get the index "idx" and de-structure to access "value"
idx < lenBy2 // if index less than half-length "lenBy2"
? [ // return key-value pair as a 2-element array
value, // [ "banana", "yellow" ], for example
arr[idx + lenBy2]?.value
]
: [] // if index >= half-length, return empty array
)
).filter( // filter key-value pairs to retain only non-empty ones
x => x.length == 2
)
);
};
// below are steps only to generate results for various test cases
// the original array from the question
const array1 = [{value: 'banana'}, {value: 'apple'}, {value: 'yellow'}, {value: 'red'}];
// test-case 2 - an array with 3 pairs
const array2 = [
{value: 'banana'}, {value: 'apple'}, {value: 'tomato'},
{value: 'yellow'}, {value: 'green'}, {value: 'red'}
];
// mismatched array where the fruit "orange" has no matching color
const array3 = [
{value: 'banana'}, {value: 'apple'}, {value: 'orange'},
{value: 'yellow'}, {value: 'red'}
];
// mismatched array where the color "orange" has no matching fruit
const array4 = [
{value: 'banana'}, {value: 'apple'},
{value: 'yellow'}, {value: 'red'}, {value: 'orange'}
];
// iterate over the various test case arrays &
// console.log the result
[array1, array2, array3, array4].forEach((arr, idx) =>
console.log(
`\n***---> test case ${idx + 1} <---***\n`,
'given array: ???? ', JSON.stringify(arr),
'\n\nresult object: ???? \n', getMyObject(arr),
'\n ***---> end of result <---*** \n\n'
)
);
发布评论
评论(2)
您可以使用
code> array.prototype。 flatmap
:You can use
Array.prototype.flatMap
:这是使用评论中提供的相同逻辑的答案。这具有相关的描述以帮助更好地理解。
Here is an answer using the same logic provided in the comment. This has relevant descriptions to help understand better.
Feel free to post questions in comments, in case it is unclear how the above works.