J'ai une carte JS immuable avec une structure comme ci-dessous

{
  "a": [
    {"name": "foo", "untracked": true},
    {"name": "bar"}
  ],
  "b": [
    {"name": "baz"},
    {"name": "bar", "untracked": true}
  ]
}

Je souhaite filtrer cet objet pour n'afficher que les objets suivis - c'est-à-dire

{
  "a": [
    {"name": "bar"}
  ],
  "b": [
    {"name": "baz"},
  ]
}

Existe-t-il un moyen pour moi de le faire avec des opérations de carte immuables? j'ai essayé ci-dessous mais cela ne semble pas fonctionner

object.map((lis) => lis.filter((li) => li.untracked !== true)).toJS()

object.toList().map((lis) => lis.filter((li) => li.untracked !== true))
0
Kannaj 20 nov. 2018 à 19:30

5 réponses

Meilleure réponse
let data={
  "a": [
    {"name": "foo", "untracked": true},
    {"name": "bar"}
  ],
  "b": [
    {"name": "baz"},
    {"name": "bar", "untracked": true}
  ]
}
Object.entries(data).map(([key, value]) => {
  data[key]=value.filter(ele=>ele.untracked!=true)
});
console.log("result is : ",data)
1
Biswadev 20 nov. 2018 à 17:05

Parcourez cet objet et créez un nouvel objet avec les clés de l'ancien objet, puis filtrez les valeurs de l'ancien objet où non suivi n'est pas égal à faux

let obj = {
  "a": [{
      "name": "foo",
      "untracked": true
    },
    {
      "name": "bar"
    }
  ],
  "b": [{
      "name": "baz"
    },
    {
      "name": "bar",
      "untracked": true
    }
  ]
}
let newObj = {};

function filterObject(obj) {
  for (let keys in obj) {
    newObj[keys] = obj[keys].filter(item => {
      return item.untracked !== true
    })
  }
}
filterObject(obj)
console.log(newObj)
0
brk 20 nov. 2018 à 16:37
data = {
  "a": [
    {"name": "foo", "untracked": true},
    {"name": "bar"}
  ],
  "b": [
    {"name": "baz"},
    {"name": "bar", "untracked": true}
  ]
}

let result = Object.entries(data).map(([key, values])=>(
 { key: values.filter(({untracked})=> !untracked) }
))

console.log(result)
0
Mohammed Ashfaq 21 nov. 2018 à 01:21
const data = Immutable.fromJS({
  "a": [
    {"name": "foo", "untracked": true},
    {"name": "bar"}
  ],
  "b": [
    {"name": "baz"},
    {"name": "bar", "untracked": true}
  ]
});

const filteredData = data.map(item => item.filter(iItem => !iItem.get('untracked')));
0
Daya 13 mars 2019 à 09:27

Selon les documents ImmutableJS:

filter() returns a new Map with only the entries for which the predicate function returns true.

Exemple:

function someFilterFunction(entry) {
  return !entry.untracked;
}
myMapOfStuff = myMapOfStuff.filter(someFilterFunction);

Lien vers la documentation: https://facebook.github.io/immutable- js / docs / # / Map / filter

EDIT: N'oubliez pas que la méthode d'une collection immuable renvoie une COPIE de la collection sur laquelle vous opérez. Une réaffectation doit se produire si vous souhaitez conserver la référence la plus récente.

0
Francisco Garcia 20 nov. 2018 à 16:35