gpt4 book ai didi

javascript - js EVAL函数是否改变元素的位置?

转载 作者:可可西里 更新时间:2023-11-01 13:42:36 25 4
gpt4 key购买 nike

我有一个用 PHP 和 JS 编写的应用程序。当我评估 json 编码的 PHP 数组时,数组排序会发生变化。例如,如果我在 PHP 中有这样一个数组:

<?php 
$array = [148 => 'Plane', 149 => 'Car'];
?>

<script>
var array = eval(<?php echo json_encode($array)?>);
</script>

当我在控制台中打印数组时,元素的位置不同。你知道这怎么会发生吗?

更新

感谢您的回答,但我想在 JS 结构中保持完全相同的顺序,所以我不想按特定字段对数组进行排序。也许从数据库得到的订单是这样的:

[148 => object, 155 => object, 133 => object]

我想在 JS 中按照它的顺序创建一个这样的数组(位置来自 DB,它必须是那个顺序)。可能吗?

最佳答案

<?php echo json_encode($array)?>

由于数组是稀疏的,这解析为

{"148":"Plane","149":"Car"}

这是一个对象,在 JS 中不保证对象属性顺序。

http://php.net/manual/en/function.json-encode.php

Note: When encoding an array, if the keys are not a continuous numeric sequence starting from 0, all keys are encoded as strings, and specified explicitly for each key-value pair.

您可以通过从对象创建一个数组来解决这个问题,如下所示:

var obj = <?php echo json_encode($array)?>; // note, eval not needed
var arr = [];
Object.keys(obj).forEach(function(key) {
arr[key] = obj[key];
});

关于更新:

需要单独保存按键的顺序。

var order = <?php echo json_encode(array_keys($array))?>;
var obj = <?php echo json_encode($array)?>;
order.forEach(function(key) {
console.log(key, obj[key]); // or whatever you need
});

你甚至可以构造一个 ordered map (PHP 的数组实际上是,与 JS 中的数组不同)如果你使用 ES6 或 polyfill .

关于javascript - js EVAL函数是否改变元素的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35014214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com