在JavaScript中是否有类似于Compact的函数?

时间:2013-04-29 03:22:26

标签: php javascript arrays variables

我发现compact函数非常有用(在php中)。这是它的作用:

$some_var = 'value';
$ar = compact('some_var');
//now $ar is array('some_var' => 'value') 

因此,当元素的键是变量名时,它会根据您指定的变量创建数组。 javascript中有任何类型的功能吗?

4 个答案:

答案 0 :(得分:6)

您可以使用ES6 / ES2015 Object initializer

示例:

let bar = 'bar', foo = 'foo', baz = 'baz'; // declare variables

let obj = {bar, foo, baz}; // use object initializer

console.log(obj);

{bar: 'bar', foo: 'foo', baz: 'baz'} // output

谨防浏览器兼容性,您始终可以使用Babel

答案 1 :(得分:4)

没有类似的功能,也没有办法获取当前上下文的变量名称/值 - 只有它们是window上的“全局”变量,这是不推荐的。如果是,你可以这样做:

function compact() {
    var obj = {};
    Array.prototype.forEach.call(arguments, function (elem) {
        obj[elem] = window[elem];
    });
    return obj;
}

答案 2 :(得分:0)

你也可以使用phpjs library在javascript中使用与php中相同的功能

实施例

var1 = 'Kevin'; var2 = 'van'; var3 = 'Zonneveld';
compact('var1', 'var2', 'var3');

输出

{'var1': 'Kevin', 'var2': 'van', 'var3': 'Zonneveld'}

答案 3 :(得分:0)

如果变量不在全球范围内,它仍然有可能但不实用。

function somefunc() {
    var a = 'aaa',
        b = 'bbb';

    var compact = function() {
        var obj = {};
        for (var i = 0; i < arguments.length; i++) {
            var key = arguments[i];
            var value = eval(key);
            obj[key] = value;
        }
        return obj;
    }
    console.log(compact('a', 'b')) // {a:'aaa',b:'bbb'}
}

好消息是ES6有一项新功能可以做到这一点。

var a=1,b=2;
console.log({a,b}) // {a:1,b:2}