【问题标题】:Is there a function in javascript similar to compact from php?javascript中是否有类似于php中的compact的功能?
【发布时间】:2013-04-22 15:40:28
【问题描述】:

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

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

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

【问题讨论】:

  • 请考虑将接受的答案更改为stackoverflow.com/a/45884534/6047611
  • 完成。但是在 stackoverflow 上 4 年后改变接受的答案似乎不寻常。
  • 谢谢,这将有助于下一个找到此帖子的人????????

标签: php javascript arrays variables


【解决方案1】:

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

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

【讨论】:

  • 这似乎很危险且不可取,我不推荐这种方法。一个更好的解决方案是 > stackoverflow.com/a/45884534/1757364
  • @Gavin 同意,这个答案是 5 岁。对象初始化简写现在很常见,是一种更好的方法。
【解决方案2】:

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

示例

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

输出

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

【讨论】:

  • 谢谢我忘了递归压缩
【解决方案3】:

如果变量不在全局范围内,这仍然是可能的,但不实用。

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}

【讨论】:

    【解决方案4】:

    你可以使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 2021-04-11
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多