Я хочу иметь функцию javascript, которая может принимать объект со свойствами в качестве аргумента, обрабатывать его и возвращать свойства объекта в виде массива строк ... Код, который я пытаюсь до сих пор, здесь, но он распечатывает имя записи и Имя свойства

let Southampton={
    name:"Southampton",
    founded:1900,
    stadium:"St. Mary's Stadium",
    points:36
}
function printObj(arg) {
  for (let [key, value] of Object.entries(arg)) {
    console.log(`${key}: ${value}`);
  }
}
function printObj(Southampton)

Приведенный выше код выводит

name: Southampton
founded: 1900
stadium: St. Mary's Stadium
points: 36

Можно ли дополнительно изменить функцию, чтобы она возвращала это

Southampton was founded in 1900

Спасибо за вашу помощь

0
CodeTiger 2 Мар 2021 в 14:15

4 ответа

Лучший ответ

Используйте arg.map(), чтобы вернуть массив из вызова функции для каждой записи.

function obj_to_array(arg) {
    return Object.entries(arg).map(([key, value]) => `${key}: ${value}`);
}

Чтобы получить второе сообщение, вы не можете использовать такую ​​функцию общего назначения, поскольку она должна форматировать строку специально для свойства founded.

function when_founded(arg) {
    return `${arg.name} was founded in ${arg.founded}`;
}

Если вы действительно хотите, чтобы они оба были в одной функции, вы можете распечатать сообщение перед возвратом массива.

let Southampton = {
  name: "Southampton",
  founded: 1900,
  stadium: "St. Mary's Stadium",
  points: 36
};

function obj_to_array(arg) {
  console.log(`${arg.name} was founded in ${arg.founded}`)

  return Object.entries(arg).map(([key, value]) => `${key}: ${value}`);
}

console.log(obj_to_array(Southampton));
4
Barmar 2 Мар 2021 в 11:38

Для этого нет встроенной функции. Если я правильно понимаю, для достижения вашей цели вам просто нужно использовать интерполяцию строк для отображения параметров, например:

function printObj(obj) {
 return `${obj.name} is founded in ${obj.founded}.`;
}
2
Pavlov Serhiy 2 Мар 2021 в 11:23

Если вы знаете индексы каждого слова, вы можете сделать что-то вроде этого:

let Southampton={
    name:"Southampton",
    founded:1900,
    stadium:"St. Mary's Stadium",
    points:36
}
function printObj(arg) {

    let values = [];

    for (let [key, value] of Object.entries(arg)) {
        values.push(key);
        values.push(value);
    }

    console.log(`${values[1]} was founded in ${values[3]}`);
}
printObj(Southampton); // Southampton was founded in 1900

1
Jay Hales 2 Мар 2021 в 11:22

С помощью метода Object.values ​​() вы можете выполнять основную работу в качестве единственного карандаша. (НЕТ поддержки IE)

const valArray = Object.values(Southampton);

console.log(valArray);

console.log(`${valArray[0]} is founded in ${valArray[1]}`);
1
Friedrich Siever 2 Мар 2021 в 11:36