Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как заполнить объект через цикл с присвоением переменной значению (https://javascript.ru/forum/misc/74435-kak-zapolnit-obekt-cherez-cikl-s-prisvoeniem-peremennojj-znacheniyu.html)

Tungusv 11.07.2018 15:05

как заполнить объект через цикл с присвоением переменной значению
 
Не могу сообразить. Нужно перебором свойств или есть и другие способы?
Подскажите примеры

рони 11.07.2018 15:17

:-? может макет минимальнный?

j0hnik 11.07.2018 15:17

если изменить существующие то так
var obj = { a: 0, b: 0, c: 0 };
for(prop in obj){
	obj[prop] = 1;
}
console.log(obj);


если добавить новые, то простым циклом

Tungusv 12.07.2018 07:11

//

Tungusv 12.07.2018 07:18

Есть структура:
struct:
0:
Id: "1"
Name: "name1"
ShortName: "shortname1"
ParentID: "11"
Login: "login1"
1:
Id: "2"
Name: "name2"
ShortName: "shortname2"
ParentID: "22"
Login: "login2"

Циклом нужно всем значениям присвоить переменные.

Rise 12.07.2018 08:11

Tungusv,
Что за язык, откуда структура в js? Перевернули всё с ног на голову, переменным присваиваются значения.

Rise 12.07.2018 08:33

В общем это похоже на массив объектов
function Person(Id, Name, ShortName, ParentID, Login) {
    this.Id = Id;
    this.Name = Name;
    this.ShortName = ShortName;
    this.ParentID = ParentID;
    this.Login = Login;
}

var struct = [];
    struct.push(new Person("1", "name1", "shortname1", "11", "login1"));
    struct.push(new Person("2", "name2", "shortname2", "22", "login2"));

console.log(struct);

Tungusv 12.07.2018 08:42

Вот что получилось. Верно так?
for (let i = 0; i < list.length; i++) {

item[i] = {
id: item[i]['Id'],
name : item[i]['Name'],
shortName : item[i]['ShortName'],
parentId : item[i]['ID'],
login : item[i]['login']
}


kusts.push(item);
}

Rise 12.07.2018 08:56

Вам надо list в kusts скопировать? Определенные свойства или все? Определенные:
for (let i = 0; i < list.length; i++) {
    kusts[i] = {
        Id: list[i]['Id'],
        Name: list[i]['Name'],
        ShortName: list[i]['ShortName'],
        ParentID: list[i]['ParentID'],
        Login: list[i]['Login']
    };
}

Все:
for (let i = 0; i < list.length; i++) {
    for (let k in list[i]) {
        kusts[i][k] = list[i][k];
    }
}

Даже проще так наверно)
for (let i = 0; i < list.length; i++) {
    kusts[i] = list[i];
}

Rise 12.07.2018 09:19

Хм... время на сервере форума отстает на минут 7...

Tungusv 12.07.2018 11:17

Все свойства из list перенести в kusts и чтоб этим свойствам переменные назначить.

рони 12.07.2018 11:39

:-?
for (let i = 0; i < list.length; i++) kusts[i] = {...list[i]}

SuperZen 12.07.2018 13:07

Цитата:

Сообщение от Rise
Даже проще так наверно)
for (let i = 0; i < list.length; i++) {
    kusts[i] = list[i];
}

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

<script>
  var list = [
    { 
      Id: 1,
      Name: "name1",
      ShortName: "shortname1",
      ParentID: 11,
      Login: "login1"
    },
    {
      Id: 2,
      Name: "name2",
      ShortName: "shortname2",
      ParentID: 22,
      Login: "login2"
    }
  ]
  var kusts = []
  for (let i = 0; i < list.length; i++) {
    kusts[i] = list[i];
  }
  console.log(kusts);
  kusts[0].Id = 3
  console.log(list)
</script>


Копия:

<script>
  var newO = JSON.parse(JSON.stringify(list))
  for (i in newO) {
    newO[i].Name = 'some new name'
    //n.ShortName = 'some new shortname'
  }
  console.log(newO)
</script>

Rise 12.07.2018 17:30

Tungusv,
сами свойства это переменные и есть, зачем еще переменные переменных?

рони,
совсем новое :) а я понять не мог как так что это... Что то не понял как так, в прошлом месяце приняли, а в браузере уже работает? О как прогресс чего достиг, молодцы работают на опережение :D Так! В Firefox не пашет, надо обновиться...

SuperZen,
JSON.parse(JSON.stringify(list)) это что за фокус? Ааа, типа копия, понял :)

SuperZen 13.07.2018 15:17

Rise, чтобы в древнем браузере работало (я про spread operator, и не только =>...) надо через browserify пропустить :)

Ermite 15.07.2018 21:36

Ещё как вариант
<script>
  var list = [
    { 
      Id: 1,
      Name: "name1",
      ShortName: "shortname1",
      ParentID: 11,
      Login: "login1"
    },
    {
      Id: 2,
      Name: "name2",
      ShortName: "shortname2",
      ParentID: 22,
      Login: "login2"
    }
  ];
  var kusts = [];
  for (let i = 0; i < list.length; i++) {
	kusts[i] = Object.assign({}, list[i]);
  }
  kusts[0].Id = 3;
  alert(`${kusts[0].Id}, ${list[0].Id}`);
</script>


Часовой пояс GMT +3, время: 08:19.