0

我有一个嵌套二维数组的索引数组,其元素对由一个短语和一个数字组成。

在没有双向文本的情况下,该短语出现在索引数组的每个元素的数字之前。如果存在双向文本,则短语出现在数字之后。

如果短语-编号对是混合的——即,一些短语-编号对出现在 LTR 文本中,而一些短语-编号对出现在 RTL 文本中,那么结果顺序是混合的,并且会产生一个无法用于输入的混乱列表进入 wordcloud.js 函数。

我已经尝试在将其推送到索引数组之前将其短语写为 RTL 的短语-编号对的元素的顺序颠倒过来,但无济于事。生成的索引数组呈现混乱。

var listItem = [];
var list = [];
$.each(countedPhrases, function(phrase, count) {

    console.log('phrase: ' + phrase);
    console.log('count: ' + count);

    listItem = [phrase, count];
    console.log('listItem: ' + listItem);

    list.push(listItem);
});

console.log('list: ' + list);'

示例 console.log 输出。

短语:النادر 计数:321 列表项目:النادر,321

短语:وتتلقاه 数量:321 列表项目:وتتلقاه,321

短语:终结计数:321 清单项目:终结,321

短语:播客计数:45 列表项:播客,45

列表:الواد,321,ققاد,321,结局,321,321,321,45

4

1 回答 1

0

该问题已通过将阿拉伯文本包装在以下两个 Unicode 控件 \u2067 阿拉伯文本 \u2069 中,然后再将其读入数组元素来解决。

无需赘述,纠正问题的代码如下所示:

                if (name === 'searchKeyword') {
                    if (agex.test(value)) {
                        nakedArabic = value.match(agex);
                        searchItem.target = '\u2067' + nakedArabic.join('') + '\u2069';
                    } else {
                        searchItem.target = value;
                    }
                }                           

其中agex.text(value) 是对阿拉伯字符是否存在的正则表达式测试。

简而言之,这个问题是由一种叫做溢出的东西引起的。两个 Unicode 控制字符隔离阿拉伯文本,同时保留其自然的从右到左的方向顺序。

您可以在此处了解有关问题和解决方案的更多信息。

罗迪

于 2019-07-26T05:11:01.233 回答