Wpis z mikrobloga

#javascript #naukaprogramowania

Jak mogę zrobić obiekt, w którym wstawię puste wartości we wszystkie pola?

Tzn. mam listę i chcę dodać do niej obiekt (ale wstawić puste wartości, żeby nie pokazywało się "undefined"). Robię to tak:

list.push({name: "", surname: "", age: "", title: "", kolejnePole: "", jeszczeJednoPole: "", nastepnePole: ""});
Da się to zrobić ładniej? Coś w stylu (kod wyssany z palca):

`list.push({forAll(): ""});
  • 11
@mk321: Co jako puste wartości? Pusta może być tablica (let emptyArray = []) albo obiekt (let emptyObject = {}) ale zmienna o wartości === "" pusta już nie jest.

Nie da się tego zrobić ładniej, jeśli tworzysz obiekt i tworzysz w nim pola to muszą mieć one jakąś wartość
@mk321: nie da się, bo tak jak pisze @Ilirian "" to nie jest pusta wartość. Możesz co najwyżej zrobić to bardziej elegancko. Na przykład tak:

function MyObj() {
this.name="";
this.surname="";
}

i potem

list.push(new MyObj());
Swoją drogą, może źle do tego podchodzisz. Undefined nie jest niczym złym. To naturalny i ważny mechanizm js.
@mk321:

// ES3
var myObj = {};
var myArr = ['prop1', 'prop2', 'prop3'];
for (var i = 0; i < myArr.length; i++) {
myObj[myArr[i]] = '';
}

// ES5
var myObj = {};
['prop1', 'prop2', 'prop3'].forEach(function (prop) {
myObj[prop] = '';
});

// ES5
var myObj = ['prop1', 'prop2', 'prop3'].reduce(function (o, prop) {
o[prop] = '';
return o;
}, {});

// ES6
var myObj = {prop1, prop2, prop3};

W ostatnim przypadku
@Ilirian: @mesrs123: @kmiasko: @rozdajozadarmo: racja, chodziło mi o pusty string, a nie o pusta wartość.

Potrzebuję to do tego:
- mam w AngularJS tabelę z wierszami w których są inputy,
- do tabeli dodawane są dynamiczne wiersze,
- liczba wierszy w mojej tabeli zależy od ilości obiektów na liście,
- jak dodam tylko nowy obiekt na listę, to wiersz się dodaje, ale we wszystkich inputach są wpisane wartości