#javascript #object #key
#javascript #объект #Клавиша
Вопрос:
Как будет выглядеть функция, которая «вводит» входной объект? Я изучал эту тему, но не смог найти хороших ответов.
Итак, если у меня есть входной объект…
var fruits = [{fruit: "apple", taste: "sour"},
{fruit: "cherry", taste: "sweet", color: "red"}];
functionname(fruits, function(i) { return i.fruit; });
RETURN:
{ "apple": [{fruit: "apple", taste: "sour"}],
{ "cherry": [{fruit: "cherry", taste: "sweet", color: "red"}]
functionname(fruits, function(i) { return i.taste.length; });
RETURN:
{ "4": [{fruit: "apple", taste: "sour"}],
{ "5": [{fruit: "cherry", taste: "sweet", color: "red"}]
Комментарии:
1. Моя первоначальная мысль была forEach , но forEach — это Array.forEach(обратный вызов), поэтому вместо этого я бы сказал
[].forEach.call
🙂
Ответ №1:
Вы могли бы использовать функцию, которая создает новый объект и возвращает элементы с нужным ключом.
Версия с Array#forEach
function getKeyedArray(array, callback) {
var object = Object.create(null);
array.reduce(function (a) {
var key = callback(a);
object[key] = object[key] || [];
object[key].push(a);
});
return object;
}
var fruits = [{ fruit: "apple", taste: "sour" }, { fruit: "cherry", taste: "sweet", color: "red" }];
console.log(getKeyedArray(fruits, function (i) { return i.fruit; }));
console.log(getKeyedArray(fruits, function (i) { return i.taste.length; }));
Версия с Array#reduce
function getKeyedArray(array, callback) {
return array.reduce(function (r, a) {
var key = callback(a);
r[key] = r[key] || [];
r[key].push(a);
return r;
}, Object.create(null));
}
var fruits = [{ fruit: "apple", taste: "sour" }, { fruit: "cherry", taste: "sweet", color: "red" }];
console.log(getKeyedArray(fruits, function (i) { return i.fruit; }));
console.log(getKeyedArray(fruits, function (i) { return i.taste.length; }));