#javascript
#javascript
Вопрос:
Я хочу уменьшить массив свойств объекта в строку, ниже приведен мой фрагмент кода.
let obj = {firstname: 'John', lastname: 'thomas', age: 26}
let keys = ["firstname", "age"]
let string = keys.reduce((acc, curr) => {
acc = obj[curr] " - " obj[curr];
return acc;
}, "");
console.log(string)
В настоящее время получение 26 - 26
Ожидаемая строка, которую я ищу, это John - 26
Я пробовал с размещением acc, но это не сработало. Кроме того, я знаю, что я дал «» (пустую строку) в качестве начального значения, но не повезло.
Как я могу добиться вышеуказанного результата?
Комментарии:
1. Опечатка?
obj[curr] " - " obj[curr];
дважды одно и то же свойство…2. я пробовал с obj[curr] » — » obj[acc], но не сработало
3. И все же, почему вы думаете, что это сработает случайно, если объединить одно и то же
4. я поставил это потому, что если использовать acc, то оно будет неопределенным. Так что в случае лучшего понимания
Ответ №1:
Используйте map
и join
вместо reduce
:
let obj = {firstname: 'John', lastname: 'thomas', age: 26};
let keys = ["firstname", "age"];
let string = keys.map(curr => obj[curr]).join(" - ");
console.log(string);
Ответ №2:
Я только что отредактировал ваш код. Вы не присоединялись к предыдущему значению.
let obj = { firstname: "John", lastname: "thomas", age: 26 };
let keys = ["firstname", "age"];
let string = keys.reduce((acc, curr, i) => {
if(i === 0) acc = obj[curr];
else acc = " - " obj[curr];
return acc;
}, "");
console.log(string);
Комментарии:
1. Необходимость удаления конца
" - "
делает это немного уродливым.2. @jarmod теперь все в порядке?
Ответ №3:
Вы почти на месте, значение curr
всегда является текущим элементом в массиве. Итак, в строке вашего кода, acc = obj[curr] " - " obj[curr]
, значение curr
всегда будет одинаковым для каждой итерации.
Попробуйте это —
let obj = {firstname: 'John', lastname: 'thomas', age: 26}
let keys = ["firstname", "age"]
let string = keys.reduce((acc, curr, index) => {
if (index < keys.length - 1) {
acc = obj[curr] ' - ';
} else {
acc = obj[curr];
}
return acc;
}, '');
console.log(string);
Я взял на себя смелость добавить an if condition
, чтобы вы могли избежать дополнительного -
в конце строки.