我有一些用逗号分隔的字符串。我需要在数组中获得这些值。这是我能做到的。为了得到这个,我已经做到了。
var productArray = $("#service").data('product').split(',');
并且这些数据在productArray
变量中正确地显示出来。这些数据格式是这样的。
["[44]Medicine 2", "[63]Test Sam "]
现在我需要得到这个字符[]
里面的数字。例如,我需要根据上面给出的数据得到44
和63
。我没有为这部分做任何事情,因为我没有任何办法。
您可以使用array.map转换现有数组。
下面是一个在[
和]
上使用.split
分解为多个部分的示例。另一个可行的解决方案是使用正则表达式。
// from #service.data()
var data = "[44]Medicine 2,[63]Test Sam";
var array = data.split(",");
var ids = array.map(s => s.split("]")[0].split("[")[1]);
console.log(ids)
var id_name = array.map((s) => {
return { id : s.split("]")[0].split("[")[1], name : s.split("]")[1] };
});
console.log(id_name)
另一种选择是,如果你可以更改data-
属性的生成方式,你可以直接在html中存储(有效)json,那么jquery的.data()
会给你一个对象,所以不需要额外的解析:
var data = $("#data").data("data");
console.log(data.length, data[0].id, data[0].name);
console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='data' data-data='[{"id":"1","name":"test"},{"id":"2","name":"2nd"}]'></div>
尝试使用正则表达式:
//instead of splitting the string:
console.log("[44]Medicine 2,[63]Test Sam ".match(/(?<=[)d+(?=])/g));
您可以使用RegEx:/[(.*)]/
let res = ["[44]Medicine 2", "[63]Test Sam "].map(e => Number(e.match(/[(.*)]/).pop()));
console.log(res);
或者作为代码的一步解决方案:
var productArray = $("#service")
.data('product')
.split(',')
.map(e => Number(e.match(/[(.*)]/).pop()));
注意:我还隐式地向Number
广播。