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

时间:2018-04-11 09:34:13

标签: javascript arrays object sparse-matrix

我的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>

我想将数组的键更改为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

3 个答案:

答案 0 :(得分:3)

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

&#13;
&#13;
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)
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以将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; }

答案 2 :(得分:1)

使用reduce之类的length,但将带有getter的对象作为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); 属性传递。

{{1}}