6

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

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

因此,当元素的键是变量名时,它会从您指定的变量创建数组。javascript中有什么功能吗?

4

4 回答 4

9

您可以使用 ES6/ES2015对象初始化器

例子:

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

于 2017-08-25T15:15:09.173 回答
4

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

function compact() {
    var obj = {};
    Array.prototype.forEach.call(arguments, function (elem) {
        obj[elem] = window[elem];
    });
    return obj;
}
于 2013-04-29T03:27:44.627 回答
0

您还可以使用phpjs 库在 javascript 中使用与 php 相同的功能

例子

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

输出

{'var1': 'Kevin', 'var2': 'van', 'var3': 'Zonneveld'}
于 2013-04-29T03:57:32.783 回答
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}
于 2015-10-31T05:12:24.847 回答