Mam tablicę danych JSON, który jest przechowywany w stanie mojej aplikacji. Obejmuje atrybuty, które wymagałaby szczegółowej strony (około 10 różnych pól).

Moja widoku listy wymaga tylko dwóch z nich. Na przykład,:

[
  {
    "id": 1,
    "title": 'Derp',
    "subtitle: 'Derp',
    "another": 'Derp,
    //... more attributes
  },
  {
    "id": 2,
    // ... etc
  }
]

Moja widoku listy dotyczy tylko identyfikatora, tytułu i napisów. Jaki jest najbardziej zwięzły sposób na uzyskanie tych samych danych, ale tylko przy użyciu kluczy, które określam?

Czy powinienem używać mapy? Lub destrukcja?

Edytuj: dużo dzięki za odpowiedzi pomimo policji wysiłku. To bardzo mi pomogło i spróbowałem na chwilę, aby zrozumieć, jak to zrobić. Pochodzę z Ruby, więc ES6 nie jest moim Forte.

Case użycia jest zwracanie tylko tego, co wymaga składnika reagowania z Global Redux Store, który zawiera wszystkie atrybuty danych. Na przykład mój widok listy wymaga tylko 2/3 atrybutów z danych JSON. Używam Redux Selektory do tego.

2ND / Pytanie: Czy istnieje jakaś nazwa dla tego typu metody, w której przyjmujesz tylko części JSON? Chcę dokonać metody, która robi to w selektorze Redux i muszę wymyślić nazwę. Chcę nazwać to reduktorem, ale to nie do końca pracuje, ponieważ reduktor termin jest już używany w świecie Redux w celu uzyskania metod modyfikowania stanu.

-1
Greg Blass 27 czerwiec 2017, 22:21

3 odpowiedzi

Najlepsza odpowiedź

Możesz mapować wartości za pomocą obiektu dekonstruowanego i zrekonstruowanego.

Niszcząc przypisanie:

Składnia przydziału destrukcyjnej jest wyrażeniem JavaScript, który umożliwia rozpakowanie wartości z tablic lub właściwości z obiektów w różnych zmiennych.

var a, b;
({a, b} = {a: 10, b: 20});
console.log(a); // 10
console.log(b); // 20

Niestety nazwy właściwości

var a = 'foo', b = 42, c = {};
var o = {a, b, c};
var data = [{ id: 1, title: 'Derp', subtitle: 'Derp', another: 'Derp', bla: 42 }, { id: 2, title: 'Derp', subtitle: 'Derp', another: 'Derp', bla: 42 }],
    short = data.map(({ id, title, subtitle }) => ({ id, title, subtitle }));

console.log(short);
6
Nina Scholz 29 czerwiec 2017, 09:36

Jeśli naprawdę masz JSON, to zwięzły sposób byłby użycie JSON.PARSE i reviver.

const j = '[{"id":1,"title":"Derp","subtitle":"Derp","another":"Derp"},{"id":2,"title":"Derp","subtitle":"Derp","another":"Derp"}]';

const w = ['id', 'title', 'subtitle'];
const o = JSON.parse(j, (k, v) => (v && typeof v === 'object' ? v : (w.some(i => i === k) ? v : void 0)));

console.log(o);
1
Xotic750 27 czerwiec 2017, 20:16
var ele = [
  {
    "id": 1,
    "title": 'Derp',
    "subtitle": 'Derp',
    "another": 'Derp'
  },
  {
    "id": 2,
    "title": 'Derp',
    "subtitle": 'Derp',
    "another": 'Derp'
  }
]

console.log(ele.map(({id, title, subtitle}) => 
                    ({id, title, subtitle}) )  )
2
theusual 27 czerwiec 2017, 19:36