如何使用 lodash.keyBy 更改集合中每个项目的标识符



>我有一个JSON字符串。

"1":{"name":"AK-47 | Aquamarine Revenge (Battle-Scarred)","price":"13.55","sold":"444"},"2":{"name":"AK-47 | Aquamarine Revenge (Factory New)","price":"38.96","sold":"157"} 

等等...

如何删除数字(1,2,3等(,并使用"名称"值来标识每个项目?我看过lodash.keyBy,但我无法将"name"作为标识符。最终目标是能够做obj[itemName]电话 - 并获得价格。

Lodash 有一个不同的方法_.mapKeys更适合这个:

const obj = {
  "1": {
    "name":"AK-47 | Aquamarine Revenge (Battle-Scarred)",
    "price":"13.55",
    "sold":"444"
  },
  "2":{
    "name":"AK-47 | Aquamarine Revenge (Factory New)",
    "price":"38.96",
    "sold":"157"
  }
}
console.log(_.mapKeys(obj, (val) => val.name));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script>

为什么必须用_.keyBy来完成? _.each_.omit怎么样?(_.omit假设您不再需要name键/值对(

var before = {"1":{"name":"AK-47 | Aquamarine Revenge (Battle-Scarred)","price":"13.55","sold":"444"},"2":{"name":"AK-47 | Aquamarine Revenge (Factory New)","price":"38.96","sold":"157"}};
var after = {};
_.each(before, function(b4) {
  after[b4.name] = _.omit(b4, 'name');
});

请参阅:https://repl.it/@dexygen/stackoverflowq48085676

像这样?

x = x={"1":{"name":"AK-47 | Aquamarine Revenge (Battle-Scarred)","price":"13.55","sold":"444"},"2":{"name":"AK-47 | Aquamarine Revenge (Factory New)","price":"38.96","sold":"157"} }
_.reduce(x, (acc,o) => {acc[o.name] = o; return acc;}, {})

如果需要,还可以从生成的键中删除"名称",还可以创建原始文件的副本而不是引用。

_.reduce(x, (acc,o) => {acc[o.name] = Object.assign({},o); delete acc[o.name].name; return acc;}, {})

这通过给出特定名称为您提供整个项目。

var jsonArray = [{name: "AK-47 | Aquamarine Revenge (Factory New)", price: "38.96", sold: "157"}, {name: "Glock-18 | Fade (Factory New)", price: "287,10", sold: "256"}];
function match(x) {
return x[this[0]]===this[1];
}
var nameToCheck = "AK-47 | Aquamarine Revenge (Factory New)"
var getObject = jsonArray.filter(match, ["name", nameToCheck]);
console.log(getObject);

如果你想要价格,你只需要:

var price = getObject[0].price;

最新更新