是否有一个函数可以在JavaScript中给出一个键数组和一个默认值

时间:2014-05-20 23:41:14

标签: javascript arrays object

这将是预期的行为

a = ['foo', 'bar', 'thing', 'etc'];
b = someFunction(a, false);
b; //{'foo': false, 'bar': false, 'thing': false, 'etc': false}

是否有一些我可以使用的函数,它将采用数组和默认值并生成一个对象,每个数组元素作为指向默认值的键?

编辑:谢谢大家写我自己的建议。我只是想知道一个内置的东西,比如python的默认字典。

3 个答案:

答案 0 :(得分:2)

有一个!并且偶然它具有确切的someFunction名称!!!

function someFunction(arr, value) {
    return arr.reduce(function(result, key) {
        result[key] = value;
        return result;
    }, {});
}

JSFiddle:http://jsfiddle.net/VH8Wr/

答案 1 :(得分:1)

这是一个将获取键和值列表的函数。它创建一个对象,并使用提供的值动态设置它的属性名称,然后返回它。

function makeObj(keys, value) {
    var obj = {};
    if (keys instanceof Array) {
        for (var i = 0; i < keys.length; i++ ) {
            if (keys[i]) {
                obj[keys[i]] = value;
            }
        }
        return obj;
    }
    return false;
}

var a = ['foo', 'bar', 'thing', 'etc'];
var b = makeObj(a, false);
b; //{'foo': false, 'bar': false, 'thing': false, 'etc': false}

或者你可以把它变成一个类(我知道你要求一个函数,但这就是我要做的......):

function makeObj(keys, value) {
    if (keys instanceof Array) {
        for (var i = 0; i < keys.length; i++ ) {
            if (keys[i]) {
                this[keys[i]] = value;
            }
        }
    }
}

var a = ['foo', 'bar', 'thing', 'etc'];
var b = new makeObj(a, false);
b; //{'foo': false, 'bar': false, 'thing': false, 'etc': false}

答案 2 :(得分:0)

function someFunction(arr, defval)
{
  var resultObj = {};
  arr.forEach(function(el) { resultObj[el] = defval; });
  return resultObj;
}