【问题标题】:How to convert a string of comma separated values into data array?如何将一串逗号分隔值转换为数据数组?
【发布时间】:2015-11-11 17:43:53
【问题描述】:

我正在使用 Charts.js,我想知道如何将一串逗号分隔值转换为数据数组。

有一个响应数据,它会返回(我已经编码了格式):

100.00
65.89
244.47
244.46
314.99
320.30
314.99
319.63

然后我在 AJAX 响应(使用 jQuery)之后将此数据保存为 var:

var dataComissions;
$.each(data.orders, function(i, item) {
    var dataComissions = data.orders[i].commission;     
});

这个数据每个值都有换行符,我需要这样的例外结果作为一个带逗号的字符串:

100.00, 65.89, 244.47, 244.46, 314.99, 320.30, 314.99, 319.63

编辑:这些我没有看的答案,因为我无法得到一个带有分隔值的 var,我需要对其进行转换。

这是我得到的 console.log

我需要将此响应数据转换成这样的 var:

320.30, 100.00, 65.89, 65.89, 65.89, 244.47, 244.46 ...

编辑 2: 请求数据用于:

$.getJSON( "orders/list", function( data, status ) {

        }).done(function(data) {
           $.each(data.orders, function(i, item) {
           console.warn(data.orders[i].commission); //This is from screenshot
           var dataComissions = data.orders[i].commission;  
});

@维加

var commisions = [];    
$.getJSON( "phrapi/orders/list", function( data, status ) {


        }).done(function(data) {
//    console.warn(data.orders[0].created_at);


var commisions = [];
$.each(data.orders, function(i, item) {
  commisions.push(item.commision);
});

console.log(commisions.join(', '));
});   

控制台结果:

【问题讨论】:

  • split 函数可能正是您想要的
  • @ZakariaAcharki 这不是重复的,不同的行为
  • 问题缺少信息。你是怎么得到那个控制台的?日志语句来自哪里?
  • @epascarello 更新问题,看 EDIT 2

标签: javascript jquery arrays


【解决方案1】:

使用String.split()根据分隔符进行分割,所以

var string_of_values = '100.00, 65.89, 244.47, 244.46, 314.99, 320.30, 314.99, 319.63';

var arr = string_of_values.split(', '); // this says, "split my string into an array, dividing each element by ', '. Note the whitespace is included here.

console.log(arr); // outputs: ["100.00", "65.89", "244.47", "244.46", "314.99", "320.30", "314.99", "319.63"]

http://jsbin.com/rebirigeyu/edit?html,js,console

编辑

根据您的编辑,执行以下操作:

var dataComissions = ''; // stores the result of concat
$.getJSON( "orders/list", function( data, status ) {

        }).done(function(data) {
           $.each(data.orders, function(i, item) {
           if (data.orders[i].commission) { 
               dataComissions += data.orders[i].commission+', ';   // add to our store
            }
});
console.warn(dataComissions); //This is from screenshot

问题是您每次都重新设置dataComissions,而不是附加您的值。

if() 块在设置之前确保commission 中有一个值。这可以防止出现未定义的值。

【讨论】:

  • 所以您想将其格式化为字符串?所以用逗号分隔每个值?
  • 是的,将每个值用逗号分隔,也再次编辑了我的问题,看 EDIT 2
  • 它有效,但如何摆脱控制台的“未定义”屏幕截图:i.imgur.com/T5jZ4MJ.png
  • data.orders 中的第一个项目([0] 索引)没有佣金价值。请看我的编辑
  • @Ivan console.log 在循环之外。您会看到每个添加内容,因为日志位于循环内。
【解决方案2】:

即兴使用数组。在数组中维护将增加以后根据需要进行修改的灵活性。

//your ajax respose ignoring the other fields
var data = {orders: [{commision: 320.30}, {commision: 100.00}, {commision: 65.89}, {commision: 65.89}, {commision: 65.89}, {commision: 244.47}, {commision: 244.46}]};

var commisions = [];
$.each(data.orders, function(i, item) {
  commisions.push(item.commision);
});
//use commisions.join(', ') to join the array to a single string seperated by a comma and a space

document.getElementById('result').innerHTML = commisions.join(', ');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>

基于您的第二次编辑:根据输入数据重新格式化。您可能需要将其设置为循环外的字符串对象。

//your ajax respose ignoring the other fields
var data = {orders: [{commision: 320.30}, {commision: 100.00}, {commision: 65.89}, {commision: 65.89}, {commision: 65.89}, {commision: 244.47}, {commision: 244.46}]};

var resultString = '';
$.each(data.orders, function(i, item) {
  resultString += item.commision + ((i == (data.orders.length - 1))? "":", ");
});

document.getElementById('result1').innerHTML = resultString;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result1"></div>

如果我正确理解了您编辑的帖子:您可以使用.replace 将响应字符串中的换行符替换为“,”(逗号和空格),如下所示,

var stringWithLineBreaks = document.getElementById("ajaxResponse").value;
var formattedString = stringWithLineBreaks.replace(/\n/g, ", ");
console.log(formattedString);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="ajaxResponse">100.00
65.89
244.47
244.46
314.99
320.30
314.99
319.63</textarea>

【讨论】:

  • 这对我没有帮助,因为如果我的响应数据在循环中的每一行都返回值,我应该如何首先制作 arrayOfValues?
  • @Ivan 使用数组而不是字符串,这将允许您更改连接中的分隔符,只需在需要的地方稍作更改。
  • @Ivan 你是在推动“cmets”而不是“commision”。该图像显示添加到箭头的项目不是佣金,而是该对象中的一个空字符串。
  • @Ivan 是的,我明白了.. 但我要说的是,您无法像上面评论中显示的那样得到空逗号 (, , , , , ),除非您正在推动不同的元素而不是佣金。当你得到控制台输出时,检查你在代码中commisions.push(item.commision); 行推送的变量。
  • 您是否注意到您的 var 数据,它们的属性没有引号?应该是 {"orders": [{"commision": 320.30}, ... ] } 试试看
【解决方案3】:

使用字符串方法split

例如你有一个字符串。

    let string = "split,a,string";
    let arrayOfStrings = string.split(',');

arrayOfStrings 将是 ["split", "a", "string"]。

【讨论】:

  • 这只是复制对原始问题的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2011-06-18
  • 2019-05-19
相关资源
最近更新 更多