【问题标题】:conversion of string into array将字符串转换为数组
【发布时间】:2026-01-10 12:45:01
【问题描述】:

在我的 user.data.crop_position 值是“[100, 100, 200, 200]”;

            var crop_position=user.data.crop_position.slice(1,user.data.crop_position.length-2);
        $('#cropbox').Jcrop({
            setSelect: crop_position,
            onChange: showPreview,
            onSelect: showPreview,
            aspectRatio: 1
        });

这样做我的 jcrop 没有在设定位置选择我该怎么办 这是由于我传入的字符串,我该如何删除它,

我知道这是个愚蠢的问题,但我多次遇到此类问题也请建议我将来不会出现此类问题。

问候

拉胡尔

【问题讨论】:

  • 上面的 user.data.crop_position != '' 时 user.data.crop_position 的值是多少,为什么要切片?您没有根据需要存储数组吗?为什么要切片?
  • user.data.crop_position 值为“[ 100, 100, 200, 200 ]”
  • 我正在为删除“双引号而进行切片,我正在考虑由于双引号它正在创建问题
  • crop_position 值在哪里设置,可以更改吗?

标签: javascript jquery jcrop


【解决方案1】:

Jcrop Manual 表示setSelect 接受一个数组,而不是一个字符串。

[100, 100, 200, 200] // rather than
'[100, 100, 200, 200]'

如果你不能改变输入格式,至少你可以在传递给Jcrop之前使用$.parseJSON解析它:

var crop_position = $.parseJSON(user.data.crop_position);

编辑:如有必要(字符串值中实际存在双引号),您可以使用$.parseJSON 两次,第一次解码编码的字符串值,第二次解码编码后的数组字符串:

    var crop_position = $.parseJSON($.parseJSON(user.data.crop_position));

或者只是去掉$.parseJSON之前的双引号:

    var crop_position = $.parseJSON(user.data.crop_position.slice(1, -1));    

【讨论】:

  • @galambalazs:在我的回答中添加了一些信息。
【解决方案2】:

setSelect - array [ x, y, x2, y2 ] 设置一个初始选择区域

所以你需要一个数组而不是setSelect 的字符串。你为什么不把user.data.crop_position 本身变成一个数组?如果无法更改表示,您可以使用简单的算法进行转换:

var pos  = '"[ 100, 100, 200, 200 ]"'; // user.data.crop_position
var crop_position = pos.replace(/["\[\] ]/g, '').split(',');
for (var i = crop_position.length; i--;) {
  crop_position[i] = +crop_position[i]; 
}

现在你得到了一个值数组而不是字符串。

【讨论】: