如何在javascript es6/2015中从解析对象中创建具有唯一键的映射
how to create a map with unique keys from a parsed object in javascript es6/2015?
假设我收到一个解析后的json,如下所示:
[{"a":1},{"a":2},{"a":3}]
键与a
相同。
我如何使每个a
唯一,使地图可用?'
EDIT1 :
Results I want:
let myMap = {}; //I declare my variable
//Then I fetch a json and parse it
fetch(link)
.then(function(response) {
return response.json(); //parse the json string
}).then(function(json) {
myMap = json; //set it to myMap to be used
}
由于某种原因,我有重复的键,虽然你们说json是唯一的。我是否必须先将json字符串设置为myMap
,然后只解析它?
基本上你可以使用Object
作为哈希表
var data = [{ "a": 1 }, { "a": 2 }, { "a": 3 }],
object = Object.create(null);
data.forEach(function (el) {
object[el.a] = el;
});
console.log(object);
或Map
var data = [{ "a": 1 }, { "a": 2 }, { "a": 3 }],
map = new Map;
data.forEach(function (el) {
map.set(el.a, el);
});
console.log(map.get(1));
Map相对于Object的优点是,键可以是任何东西。键不转换为字符串。映射可以使用对象或其他基本值或非基本值作为键
如果你有一个单一的值列表,或者想要确保它是唯一的,你可以使用这样提供的索引:
obj.map((item, index) =>
...
)}
也许是这个?
[{a:1},{a:2},{a:3}].map(function(item, index) { item.id = index; return item; });
javascript中的Map不需要唯一的id,它将遍历所有的值。它会遍历所有对象不管键是否相同
,
var kvArray = [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}]
var reformattedArray = kvArray.map(function(obj){
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});
好吧,[{a:1},{a:2},{a:3}]
已经是独一无二的…但是,它是一个数组。所以你不能直接访问对象{a:2, ...}
,而是通过循环找到索引。
a
创建新的MAP,这样如何?-减少可以帮助我们。:) 顺便说一句,Nina Scholz的答案是正确的。
let myMap = {}; //I declare my variable
//Then I fetch a json and parse it
fetch(link)
.then(function(response) {
return response.json(); //parse the json string
}).then(function(json) {
// myMap = json; //set it to myMap to be used
myMap = json.reduce(function(p, n) { p[n.a] = n; return p; }, {});
// n.a or n['a'] - primary key (in sample, [1,2,3...])
// "myMap[1].foo", "myMap[2].bar"
// or change KEY as your taste.
myMap = json.reduce(function(p, n) { p['k' + n.a] = n; return p; }, {});
// "myMap.k1.foo", "myMap.k2.bar"
// It's unique but if you want everything...
myMap = json.reduce(function(p, n) {
var k = 'k' + n.a;
if(p[k] !== undefined) { p[k] = n; }
else if(Array.isArray(p[k])) { p[k].push(n); }
else { p[k] = [p[k]] ; }
return p;
}, {});
}
相关文章:
- 在创建对象后附加一个jquery事件
- 错误:自动化服务器可以't创建对象
- 如何在不使用 new 关键字的情况下从函数创建对象
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 创建对象函数原型和代码是错误的
- 使用Undercore创建对象集合
- 如何在JavaScript中创建对象时使用变量的值
- 正在创建对象的递归列表
- 这两种不同的创建对象文字的方法有什么区别
- ES6 const,用于在JavaScript中创建对象原型;这是一种模式吗
- 使用字符串作为名称创建对象
- 使用参数创建对象
- 如何在JS中创建对象的可变和不可变副本
- 用javascript创建对象的dynamic数组
- Javascript,用vars创建对象的最佳方法
- 离子幻灯片框中未创建对象
- 在创建对象时调用javascript函数
- JavaScript - 有没有办法动态创建对象的新实例
- 为什么使用 Object('123') 创建对象会创建一个 String() 对象,但 typeof 是“对象”
- EmberJS - 在创建对象后添加绑定