it-swarm.com.de

lodash wählt Objektfelder aus dem Array aus

Ich habe eine Reihe von Objekten:

var results= [
    {         
      "_type": "MyType",
      "_id": "57623535a44b8f1417740a13",         
      "_source": {
        "info": {
          "year": 2010,
          "number": "string",             
        },
        "type": "stolen",           
        "date": "2016-06-16T00:00:00",
        "createdBy": "57469f3c71c8bf2479d225a6"            
      }
    }
  ];

Ich muss bestimmte Felder aus dem Array auswählen. Im Ergebnis möchte ich Folgendes erhalten:

[
    {
        "_id": "57623535a44b8f1417740a13",
        "info": {
            "year": 2010,
            "number": "string"
        },
        "type": "stolen",            
        "date": "2016-06-16T00:00:00",
        "createdBy": "57469f3c71c8bf2479d225a6"
    }
]

Wie Sie sehen können, möchte ich das _id-Feld und den Inhalt des _source-Objekts auswählen. Wie mache ich das mit lodash?

Ich habe .map-Funktion gefunden, aber es braucht kein Array von Schlüsseln: var res = _.map(results, "_source");

13
user348173

Du könntest es tun:

var mapped = _.map(results, _.partialRight(_.pick, ['_id', 'info', 'type', 'date', 'createdBy']));

Eine kleine Erklärung:

  1. _.map() : Erwartet eine Funktion, die jedes Element aus der Auflistung nimmt, damit Sie es einem anderen Element zuordnen können.
  2. _.partialRight() : Übernimmt eine Funktion, die später mit den angehängten Argumenten aufgerufen wird
  3. _.pick() : Ruft den vom Objekt angegebenen Pfad ab.
29
radyz

Im einfachen Javascript können Sie mit Array#map iterieren und für jedes Objekt ein neues Objekt erstellen, ohne das Originalobjekt zu beschädigen.

var results = [{ "_type": "MyType", "_id": "57623535a44b8f1417740a13", "_source": { "info": { "year": 2010, "number": "string", }, "type": "stolen", "date": "2016-06-16T00:00:00", "createdBy": "57469f3c71c8bf2479d225a6" } }],
    res = results.map(function (a) {
        var o = { _id: a._id };
        ["info", "type", "date", "createdBy"].forEach(function (k) {
            o[k] = a._source[k];
        });
        return o;
    });

console.log(res);

4
Nina Scholz

var results = [{
  _type: "MyType",
  _id: "57623535a44b8f1417740a13",
  _source: {
    info: {
      year: 2010,
      number: "string",
    },
    type: "stolen",
    date: "2016-06-16T00:00:00",
    createdBy: "57469f3c71c8bf2479d225a6"
  }
}];

var rootProperty = ['_id']
var innerProperty = '_source'

var myArray = _.map(results, result => _(result)
  .pick(rootProperty)
  .assign(_.result(result, innerProperty))
  .value()
)

console.log(myArray)
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

1

Sie können map () das Ergebnis und jedes Element zuweisen () den _id-Schlüsselwert in einem Objekt mit dem _source-Objekt verknüpfen.

results = _.map(results, item => _.assign(
  { _id: item._id }, 
  item._source
));

var results = [{
  "_type": "MyType",
  "_id": "57623535a44b8f1417740a13",
  "_source": {
    "info": {
      "year": 2010,
      "number": "string",
    },
    "type": "stolen",
    "date": "2016-06-16T00:00:00",
    "createdBy": "57469f3c71c8bf2479d225a6"
  }
}];

results = _.map(results, item => _.assign(
  { _id: item._id }, 
  item._source
));

document.write('<pre>' + JSON.stringify(results, 0, 4) + '</pre>');
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>

Sie können dies auch in einfachem JS schreiben:

result = results.map(item => Object.assign(
  { _id: item._id }, item._source
));

var results = [{
  "_type": "MyType",
  "_id": "57623535a44b8f1417740a13",
  "_source": {
    "info": {
      "year": 2010,
      "number": "string",
    },
    "type": "stolen",
    "date": "2016-06-16T00:00:00",
    "createdBy": "57469f3c71c8bf2479d225a6"
  }
}];

result = results.map(item => Object.assign(
  { _id: item._id }, item._source
));

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

0
ryeballar