проблема с созданием строки, используя значения свойств объекта - PullRequest
1 голос
/ 02 июля 2019

У меня проблема с созданием нового свойства, которое содержит строку, используя значения существующих свойств.не могли бы вы дать мне знать, почему я не могу заставить его работать?

 function greetDevelopers(list) {
  for(let i=0 ; i< list.length ; i++ ){
  return 'Hi '+list[i].firstName +', what do you like the most about 
 '+list[i].language +'?'
  }
 }

, когда я пишу подобный код для ввода нового свойства в каждый объект, он продолжает отображать самый первый результат объекта.

однако, если я пытаюсь это сделать

 function greetDevelopers(list) {
  for(let i=0 ; i< list.length ; i++ ){
  return 'Hi '+list[1].firstName +', what do you like the most about 
 '+list[1].language +'?'
  }
 }

показывает правильные значения в объекте.

https://www.codewars.com/kata/coding-meetup-number-2-higher-order-functions-series-greet-developers/train/javascript

Ваша задача - вернуть массив, в котором у каждого объекта будет новое свойство'reeting 'со следующим строковым значением:

Hi Что вам больше всего нравится в ?

function greetDevelopers(list) {
 for(let i=0 ; i< list.length ; i++ ){
 return 'Hi '+list[i].firstName +', what do you like the most about 
'+list[i].language +'?'
 }
}

var list1 = [
  { firstName: 'Sofia', lastName: 'I.', country: 'Argentina', continent: 
'Americas', age: 35, language: 'Java' },
  { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 
'Europe', age: 35, language: 'Python' },
  { firstName: 'Madison', lastName: 'U.', country: 'United States', 
continent: 'Americas', age: 32, language: 'Ruby' } 
];
Test.assertDeepEquals(greetDevelopers(list1), answer);

[
  { firstName: 'Sofia', lastName: 'I.', country: 'Argentina', continent: 
'Americas', age: 35, language: 'Java',
    greeting: 'Hi Sofia, what do you like the most about Java?'
  },
  { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 
'Europe', age: 35, language: 'Python',
    greeting: 'Hi Lukas, what do you like the most about Python?'
  },
  { firstName: 'Madison', lastName: 'U.', country: 'United States', 
continent: 'Americas', age: 32, language: 'Ruby',
    greeting: 'Hi Madison, what do you like the most about Ruby?'
  } 
];

Я хочу сделать так.но мой код не работаетне могли бы вы помочь?спасибо!

Ответы [ 5 ]

0 голосов
/ 02 июля 2019

Когда вам нужно создать массив из другого массива, вы часто можете сделать это с помощью функции map.Функция map принимает каждую запись одного массива и возвращает новый массив.В вашем случае я бы сделал это так:

const list1 = [
  { firstName: 'Sofia', lastName: 'I.', country: 'Argentina', continent: 
'Americas', age: 35, language: 'Java',
    //greeting: 'Hi Sofia, what do you like the most about Java?'
  },
  { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 
'Europe', age: 35, language: 'Python',
    //greeting: 'Hi Lukas, what do you like the most about Python?'
  },
  { firstName: 'Madison', lastName: 'U.', country: 'United States', 
continent: 'Americas', age: 32, language: 'Ruby',
    //greeting: 'Hi Madison, what do you like the most about Ruby?'
  } 
];

const greetDevelopers = list1.map((item) => {
    return `Hi ${item.firstName}, what do you like the most about ${item.language}?`
});

console.log(greetDevelopers);

Или, если вы действительно хотите добавить свойства к существующим объектам:

let list1 = [
  { firstName: 'Sofia', lastName: 'I.', country: 'Argentina', continent: 
'Americas', age: 35, language: 'Java',
    // greeting: 'Hi Sofia, what do you like the most about Java?'
  },
  { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 
'Europe', age: 35, language: 'Python',
    // greeting: 'Hi Lukas, what do you like the most about Python?'
  },
  { firstName: 'Madison', lastName: 'U.', country: 'United States', 
continent: 'Americas', age: 32, language: 'Ruby',
    // greeting: 'Hi Madison, what do you like the most about Ruby?'
  } 
];

list1.forEach((item) => {
    item.greeting = `Hi ${item.firstName}, what do you like the most about ${item.language}?`
});

console.log(list1);
0 голосов
/ 02 июля 2019

Вы можете взять Array#map для возврата массива объекта с деструктурирующим присваиванием для firstName и language и литералом шаблона дляискомая строка с изменяющимися значениями.

function greetDevelopers(list) {
    return list.map(({ firstName, language }) =>
        ({ geeting: `Hi ${firstName}, what do you like the most about ${language}?` }));
}

var list1 = [{ firstName: 'Sofia', lastName: 'I.', country: 'Argentina', continent: 'Americas', age: 35, language: 'Java' }, { firstName: 'Lukas', lastName: 'X.', country: 'Croatia', continent: 'Europe', age: 35, language: 'Python' }, { firstName: 'Madison', lastName: 'U.', country: 'United States', continent: 'Americas', age: 32, language: 'Ruby' }];

console.log(greetDevelopers(list1));
0 голосов
/ 02 июля 2019

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

function greetDevelopers(developer) {
    return 'Hi '+developer.firstName +', what do you like the most about '+developer.language +'?'
 }

for(let i=0 ; i< list.length ; i++ ){
  greetDevelopers(list[i]);
}
0 голосов
/ 02 июля 2019

Вам необходимо добавить свойство greeting к каждому объекту в list со строкой, которую вы строили.

function greetDevelopers(list) {
  for (let i = 0; i < list.length; i++) {
    list[i].greeting = 'Hi ' + list[i].firstName + ', what do you like the most about ' + list[i].language + ' ? ';
  }
  return list;
}

var list1 = [{firstName:'Sofia',lastName:'I.',country:'Argentina',continent:'Americas',age:35,language:'Java'},{firstName:'Lukas',lastName:'X.',country:'Croatia',continent:'Europe',age:35,language:'Python'},{firstName:'Madison',lastName:'U.',country:'United States',continent:'Americas',age:32,language:'Ruby'}]

console.log(greetDevelopers(list1));
.as-console-wrapper { max-height: 100% !important; top: auto; }
0 голосов
/ 02 июля 2019

Вы возвращаете строку внутри цикла.Всякий раз, когда вы возвращаетесь, вы хотите сказать, что хотите остановить все и вернуть заданное значение, что хорошо, если, например, вы искали цикл для определенного элемента, а затем нашли его, так как не имеет смыслазавершите цикл.

Однако мне кажется, что вы хотите сделать, это вернуть строку для каждого пользователя .

Чтобы сделать это, вы можете сделать следующее:

function greetDevelopers(list) {
  let greetings = new Array();
  for(let i=0 ; i< list.length ; i++ ){
    greetings.push('Hi '+list[i].firstName +', what do you like the most about '+list[i].language +'?');
  }
  return greetings;
}

console.log(greetDevelopers([{firstName: 'Jon', language: 'Java'}, {firstName: 'Peter', language: 'English'}]));

Кроме того, в более продвинутых браузерах вы также можете сделать следующее, что даст вам более управляемый подход на основе итераторов:

    function* greetDevelopers(list) {
      for(let i=0 ; i< list.length ; i++ ){
        yield 'Hi '+list[i].firstName +', what do you like the most about '+list[i].language +'?';
      }
    }

const greetingsIterator = greetDevelopers([{firstName: 'Jon', language: 'Java'}, {firstName: 'Peter', language: 'English'}]);

console.log(greetingsIterator.next().value);
console.log(greetingsIterator.next().value);

Более подробную информацию о yield и протоколе итератора можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...