it-swarm.com.de

Lodash-Kartenschlüssel und -werte für ein Objekt

Mein Code:

const orig = {" a ":1, " b ":2}
let result = _.mapKeys(_.mapValues(orig, (v) => v + 1), (v, k) => k.trim())

aktuelles und gewünschtes Ergebnis = { "a": 2, "b": 3 }

Aber gibt es eine bessere Lodashy-Methode? 

6
danday74

Diese Lösung verwendet _.transform() und ist etwas kürzer. Ich bin mir nicht sicher, ob es besser ist als Ihre funktionale Lösung.

const orig = {" a ": 1, " b ": 2 };

const result = _.transform(orig, (r, v, k) => r[k.trim()] = v + 1);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

8
Ori Drori

Der Vollständigkeit halber würden Sie dies ohne lodash tun:

Lösung 1: Object.keys & reduzieren

const orig = {" a ":1, " b ":2};
let result = Object.keys(orig).reduce((r, k) => {
  r[k.trim()] = orig[k] + 1;
  return r;
}, {})
console.log(result);

Lösung 2: Objekt.Einträge & reduzieren

Wenn Sie mit der Verwendung einer Polyfüllung für den Internet Explorer einverstanden sind, können Sie dies auch tun:

const orig = {" a ":1, " b ":2};
let result = Object.entries(orig).reduce((r, [k, v]) => {
  r[k.trim()] = v + 1;
  return r;
}, {})
console.log(result);

Lösung 3: Object.keys/Object.entries mit Array.forEach

Eines der Hauptprobleme bei den oben genannten Ansätzen besteht darin, dass Sie das Ergebnis mit den Anweisungen reduct zurückgeben müssen. Es ist kein großes Problem, erhöht aber die Anzahl der Zeilen. Ein alternativer Ansatz ist wie folgt

const orig = {" a ":1, " b ":2};
let result = {};
Object.keys(orig).forEach(k => result[k.trim()] = orig[k] + 1);
console.log(result);

oder

const orig = {" a ":1, " b ":2};
let result = {};
Object.entries(orig).forEach(([k, v]) => result[k.trim()] = v + 1);
console.log(result);
2
Yahya Uddin

Wie wäre es mit so etwas? 

const orig = {" a ":1, " b ":2};

function test(object) {
  let out = {};

  _.forEach(object, function(value, key) {
    out[key.trim()] = value + 1;
  });

  return out;
}

console.log(test(orig));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

1
mindlis

Mit reduz können Sie Folgendes tun:

var obj = {" a ":1, " b ":2}

result = _.reduce(obj, (result, v, k) => {
  result[k.trim()] = v + 1
  return result
}, {})

console.log(result)
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>

reduzieren ist bekannter, aber die IMO-Transformation scheint hier angemessener zu sein

1
danday74