基于偶数/奇数索引将数组转换为对象

soy*_*soy 6 javascript arrays underscore.js

我试图根据数组的索引是奇数还是偶数将数组转换为对象.

例如,,

输入: ["name", "Tom", "age", 20]

输出:{ "name": "tom","age": 20 }

它可以使用例如JavaScript的基本功能实现forEach,map以及filter.但我想要更简单的代码.

所以我检查了underscore.js的文档,但我找不到一个好方法.有什么方法可以解决这个问题吗?

Ara*_*Rey 5

有趣的问题,我的两分钱:

简单且高性能的循环:

const simpleArray = ["name", "Tom", "age", 20];

// Modifying the Array object
Array.prototype.toObject = function() {
    let r = {};

    for(let i = 0; i < this.length; i += 2) {
        let key = this[i], value = this[i + 1];
        r[key] = value;
    }

    return r;
}

// Or as a function
const toObject = arr => {
    let r = {};

    for(let i = 0; i < arr.length; i += 2) {
        let key = arr[i], value = arr[i + 1];
        r[key] = value;
    }

    return r;
}

const simpleObjectOne = simpleArray.toObject(); // First method
const simpleObjectTwo = toObject(simpleArray); // Second method
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 4

您可以使用Array#forEach并检查索引,如果不均匀,则将元素分配给最后一项的键。

var array =  ["name", "Tom", "age", 20],
    object = {};

array.forEach(function (a, i, aa) {
    if (i & 1) {
        object[aa[i - 1]] = a;
    }
});

console.log(object);
Run Code Online (Sandbox Code Playgroud)

Array#reduce

var array =  ["name", "Tom", "age", 20],
    object = array.reduce(function (r, a, i, aa) {
        if (i & 1) {
            r[aa[i - 1]] = a;
        }
        return r;
    }, {});

console.log(object);
Run Code Online (Sandbox Code Playgroud)