javascript从数组创建字典

javascript从数组创建字典,javascript,angularjs,arrays,dictionary,Javascript,Angularjs,Arrays,Dictionary,我有一个这样的数组 propertiesToCheck: [ {name: 'name', type: 'type', enabled: true}, { name: 'name2', type: 'type2', templateUrl: 'something.html', preferences: { places: [place1, place2,...], pl

我有一个这样的数组

propertiesToCheck: [
    {name: 'name', type: 'type', enabled: true},
    {
        name: 'name2',
        type: 'type2',
        templateUrl: 'something.html',
        preferences: {
            places: [place1, place2,...],
            placesDict: ????
        },
        enabled: true
    }
]
places
数组中有id、name等对象。现在我想创建一个字典
placesDict
,它看起来应该像
{place1.id:0,place2.id:0,…}
,所以所有值都将设置为0。我该怎么做

var placesDict = {};
propertiesToCheck[1].preferences.places.forEach(place => {
  placesDict[place.id] = 0;
});
同样的事情,但是使用函数定义而不是箭头函数

var placesDict = {};
propertiesToCheck[1].preferences.places.forEach(setPlace);

function setPlace (place) {
  placesDict[place.id] = 0; 
}

要将此功能附加到
首选项
对象的方法,请执行以下操作:

propertiesToCheck: [
    {name: 'name', type: 'type', enabled: true},
    {
        name: 'name2',
        type: 'type2',
        templateUrl: 'something.html',
        preferences: {
            places: [place1, place2,...],
            placesDict: () => {
              newDict = {}; 
              propertiesToCheck[1].preferences.places.forEach(place => newDict[place.id] = 0);
              return newDict;
            }
        },
        enabled: true
    }
]

console.log(propertiesToCheck[1].preferences.placesDict()); // {place1.id: 0, place2.id: 0, ...}
将属性
placesDict
设置为等于函数返回值:

propertiesToCheck: [
    {name: 'name', type: 'type', enabled: true},
    {
        name: 'name2',
        type: 'type2',
        templateUrl: 'something.html',
        preferences: {
            places: [place1, place2,...],
            placesDict: createDict()
        },
        enabled: true
    }
]

function createDict() {
  var placesDict = {};
  propertiesToCheck[1].preferences.places.forEach(place => {
    placesDict[place.id] = 0; 
  }); 
}
我希望这有帮助

例如:

var createDict = R.pipe(R.pluck('id'), R.map(R.pair(R.__, 0)), R.fromPairs);

var places = [{ id: 'place1id' }, { id: 'place2id' }];
var placesDict = createDict(places);

// {"place1id": 0, "place2id": 0}

我可以在首选项中执行此操作吗?例如:
placesDict:createDict(places)
createDict(places)将在何处返回新词典?这是原始问题的一部分吗?我最初没有看到
位置信息:?
。无论如何,是的,你可以做到。看我的补充答案。通常,你用“id”来识别一些东西。为什么要将所有id设置为0?那么,pacesDict真的应该是每个数组元素中的一个字段吗?也许我不清楚。我想要一个字典,其中有id或用作键的位置的名称,默认情况下,所有值都设置为0。稍后我想让用户设置值,如果他想这样做,否则将保持0。我不希望ID为0,只希望是字典的值。我将向用户展示它,以便他可以更改值,我想我知道如何对已知项执行此操作,但是
places
array是动态的,因此我不能将所有内容都写入代码中。。