【问题标题】:Is there a list like operator in javascript?javascript中是否有类似运算符的列表?
【发布时间】:2011-01-07 20:36:29
【问题描述】:

我现在正在实现这样一个任务:我需要将 PHP 变量转换为 javascript

$arr['name1'] = 'value1';
$arr['name2'] = 'value2';

这样处理后应该是:

<script type="text/javascript">
var name1 = 'value1';
var name2 = 'value2';
...

我希望这样做:

<script>
list(<?php echo join(',',array_keys($arr)?>) = <?php echo json_encode(array_values($arr));?>

【问题讨论】:

标签: php javascript


【解决方案1】:

目前只能借助有争议的 'eval()' 函数...

function list(v,a){
  v=v.split(',');
  for(var s='',i=0;i<v.length;i++)
    s+=v[i]+'='+i+'<'+a+'.length?'+a+'['+i+']:null;';
  return s;
}

用法:

eval(list(var_names_as_comma_separated_str, str_name_of_array));

例子:

A=['one',1,'z1'];
eval(list('x,y,z','A'));
console.log('+-> First: ',x,y,z);  //output: one 1 z1
(function(){
  var z,B=['two',2,'local'];  //note that z is local variable
  console.log('Local.Before: ',x,y,z);  //output: one 1 undefined
  eval(list('x,y,z','B'));
  console.log('Local.After: ',x,y,z);  //output: two 2 local
})()
console.log('+-> Back: ',x,y,z);  //output: two 2 z1 (global z is unchanged)

注意:window['var_name'] 不能用于访问局部变量(函数内部的变量),所以除了eval()我们别无选择...

【讨论】:

    【解决方案2】:

    查看php.js,他们已经将PHP的很多功能移植到JS,list() is listed as experimental

    【讨论】:

    • 列表更像是一种语言结构;据我所知,PHP JS 似乎没有实现它。
    • @Matchu:我知道这是一种语言结构,我没有说别的。我提供了list() 的 php.js 实验端口的链接。
    • 哦,哇。以前有吗?我完全错过了。给帖子一个令牌编辑,我会切换到upvote :)
    • @Matchu:刚刚做了,如果你支持我,我不会赢得任何代表积分,因为我今天已经达到上限 - 但它可以反映答案的可能有用性。 =)
    • @AlixAxel,帖子中的第二个链接已失效。
    【解决方案3】:

    可能误解了这个问题,但这不会起作用吗?

    echo "<script>";
    foreach ($arr as $k => $v) 
    {
        echo "var $k = $v;";
    }
    echo "</script>";
    

    【讨论】:

    • 是的,这几乎就是我的意思。但我只是不确定是否有像list 这样更简洁的解决方案?
    • 未内置在 Javascript 中。您必须为此使用自定义函数,如果您只能使用极其简单的循环,这将非常愚蠢 - 更不用说该循环对于其他开发人员来说更具可读性。
    • 如果我没数错的话,你已经说傻了2次了。你可以走开!我根本不需要你的帮助!
    • @unknown 但这很愚蠢。就像你上一个问题一样,你正在创造没有问题的地方。只需将变量写入 JSON 或使用foreachlist 有什么更简洁的地方?
    【解决方案4】:

    您可能想看看PHP JS,它将帮助您完成转换任务。谢谢

    【讨论】:

    • 列表更像是一种语言结构;据我所知,PHP JS 似乎没有实现它。
    【解决方案5】:

    你可以使用 json。

    var arr = { "name1" : "value1", "name2": "value2"}
    

    然后要获取一个值,您只需像访问字段一样访问它

    var firstVal = arr.name1
    

    【讨论】:

    • 我需要一个名为name1的变量,它的值应该是value1,而不是firstval
    • 发挥创意吧,傻瓜。如果您希望将变量命名为其他名称,请更改名称。
    【解决方案6】:

    不,抱歉。

    您可以考虑简单地使用json_encode 将对象打印到脚本中。

    <?php
        $a = array('foo' => 'bar');
        json_encode($a); // returns {"foo":"bar"} which is valid Javascript syntax
    ?>
    
    <script>var obj = <?php echo json_encode($a); ?></script>
    

    【讨论】:

      猜你喜欢
      • 2011-04-12
      • 2013-07-14
      • 2016-03-29
      • 2019-01-02
      • 2015-02-07
      • 1970-01-01
      • 2011-10-14
      • 2017-06-03
      • 1970-01-01
      相关资源
      最近更新 更多