2013-08-25 18 views
12

Mam tablicę obiektów o kilku właściwościach, takich jak "wartość" i "etykieta".połączyć tablicę obiektów za pomocą jednej właściwości

array.join(' ') oczywiście daje mi "[obiekt] [obiekt]", ale zamiast tego muszę uzyskać ciąg właściwości "wartości" wszystkich obiektów, oddzielonych spacją.

Jaki jest najkrótszy sposób na zrobienie tego i czy jest to możliwe bez pisania pętli for?

+1

Czy Twoje obiekty są podobne? Innymi słowy, czy mogłyby one być wykonane z jednej funkcji konstruktora? Jeśli tak, to możesz po prostu dodać metodę '.toString()' do obiektu 'Constructor.prototype', aby zdefiniować sposób, w jaki powinien wyglądać po przekonwertowaniu na ciąg znaków. Następnie możesz po prostu zrobić 'array.join (" ")' –

+0

... [tutaj jest wersja demo] (http://jsfiddle.net/2fYvN/). Byłoby to ładniejsze niż konieczność ręcznego odwzorowania tablicy na nowe wartości do przyłączenia. –

Odpowiedz

24

Spróbuj użyć jQuery.map() - Array.map() nie używane, ponieważ IE < 9 wsparcie

Dla JSON.stringify() - użyj json2 dla starego wsparcia przeglądarki

$.map(array, function(obj){return JSON.stringify(obj)}).join(' ') 

Update: Aby uzyskać właściwości wartości

var string = $.map(array, function(obj){ 
    return obj.value 
}).join(' '); 

Demo: Fiddle

+0

Wygląda na to, że brakuje instrukcji 'return'. – undefined

+0

@ Niezdefiniowane dzięki :), poprawione ... –

+1

Wygląda na to, że źle wytłumaczyłem. Zmieniłem moje pytanie, ponieważ potrzebuję oddzielonego spacjami ciągu wszystkich właściwości "wartości" obiektów w tablicy. –

3

Zastosowanie Array.map:

let data = [ 
    { 
    "animal": "cat", 
    "name": "Fluffy" 
    }, 
    { 
    "animal": "dog", 
    "name": "Bowser" 
    }, 
    { 
    "animal": "cat", 
    "name": "Felix" 
    } 
] 

Teraz wyodrębnić nazwy używając .map:

let names = data.map(item => item.name) 


let nameString = names.join(' ') 

A teraz nameString zawiera Fluffy Bowser Felix.

Powiązane problemy