Как получить строку из списка свойств объекта?

#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 , чтобы вы могли избежать дополнительного - в конце строки.