如何更改 javascript 上具有 id 值的数组键?

How can I change key of array with value of id on the javascript?

我的 javascript 代码是这样的:

<script type="text/javascript">
    var clubs = [ 
        {id: 3, name : 'chelsea'},
        {id: 6, name : 'city'},
        {id: 7, name : 'liverpool'},
        {id: 10, name : 'manchester united'},
        {id: 16, name : 'arsenal'}
    ];
    console.log(clubs)
</script>

我想把数组的key改成id的值

例如

{id: 7, name : 'liverpool'}, 的键是 2

我想把2改成7

另一个例子

{id: 16, name : 'arsenal'} 的键是 4

它是16

我该怎么做?

更新 :

来自俱乐部数组

{id: 3, name : 'chelsea'} 的索引是 0

{id: 6, name : 'city'} 的索引是 1

{id: 7, name : 'liverpool'} 的索引是 2

{id: 10, name : 'manchester united'} 的索引是 3

{id: 16, name : 'arsenal'} 的索引是 4

我想改成这样:

{id: 3, name : 'chelsea'} 的索引是 3

{id: 6, name : 'city'} 的索引是 6

{id: 7, name : 'liverpool'} 的索引是 7

{id: 10, name : 'manchester united'} 的索引是 10

{id: 16, name : 'arsenal'} 的索引是 16

您可以将id作为索引并创建一个稀疏数组。

var clubs = [{ id: 3, name : 'chelsea' }, { id: 6, name : 'city' }, { id: 7, name : 'liverpool' }, { id: 10, name : 'manchester united' }, { id: 16, name : 'arsenal' }];
    
clubs = clubs.reduce((r, o) => (r[o.id] = o, r), []);
    
console.log(clubs);
.as-console-wrapper { max-height: 100% !important; top: 0; }

使用 reduce 并创建一个以 id 作为键的对象,而不是数组。

var clubs = [ 
    {id: 3, name : 'chelsea'},
    {id: 6, name : 'city'},
    {id: 7, name : 'liverpool'},
    {id: 10, name : 'manchester united'},
    {id: 16, name : 'arsenal'}
];
var resData = clubs.reduce((a,x)=>{
 a[x.id] = x;
 return a;
},{})
console.log(resData)

一样使用 reduce,但传递带有 getter 的对象作为 length 属性.

var clubs = [ 
    {id: 3, name : 'chelsea'},
    {id: 6, name : 'city'},
    {id: 7, name : 'liverpool'},
    {id: 10, name : 'manchester united'},
    {id: 16, name : 'arsenal'}
];
var resData = {
    get length(){
        return Object.getOwnPropertyNames(this).filter(function(i){
            return /^\d+$/.test(i)
        }).length
    }
};
clubs.reduce(function(a,x){
    a[x.id] = x;
    return a;
},resData);