Jquery逻辑从字符串中获取结果
jquery logic to get the result from string
我有一个jquery var str字符串如下:
var str = 4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101
现在我想组织字符串并得到如下结果:
var result = 4(68,69,70)|5(86,87,88,89,91)|6(100,101)
这似乎并不难。但是我无法用代码准确地理解其中的逻辑。
var dataRecord = '4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101';
var i = 1;
var first_item = [];
var second_item = [];
var final_item = [];
var agree_ref_data = dataRecord.agreement_ref_no;
var main_arr = agree_ref_data.split(',');
for (i = 0; i < main_arr.length; ++i) {
var second_arr = main_arr[i].split('-');
if (jQuery.inArray(second_arr[0], first_item) == -1) {
first_item.push(second_arr[0]);
//second_item.push(second_arr[1]);
}
if (jQuery.inArray(second_arr[0], first_item) !== -1) {
second_item.push(second_arr[1]);
} else {
final_result = second_item;
//second_item=[];
}
}
return final_result;
}
我怎样才能得到我想要的结果?
下面是纯js的代码。不需要jQuery。我们首先用逗号分隔字符串,然后迭代得到的数组,再用'-'分隔。然后将值存储为Map(为此使用纯js对象)。剩下的只是迭代对象的键值对和传递数据。
var dataRecord = '4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101';
var a = dataRecord.split(',');
var obj = {};
for(var i=0;i<a.length;i++){
var tmp = a[i].split('-');
if(typeof obj[tmp[0]] !== 'object'){
obj[tmp[0]] = [];
}
obj[tmp[0]].push(tmp[1]);
}
var result = '';
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key + " -> " + obj[key]);
result = result + key + '(' + obj[key].join() + ')|';
}
}
result = result.substr(0,result.length-1); // removing the last | character
完整的工作代码命题(不需要jquery):
var str="4-68,4-69,4-70,5-86,5-87,5-88,5-89,5-91,6-100,6-101";
//##1 . Split by ,
//we have array of elements like 4-68
var arr=str.split(",");
//results temporary object
var results={};
//##2 .Create temporary object
for ( var el in arr){
//we have parts as [4, 68]
var parts=arr[el].split("-");
var main=parts[0];
var second=parts[1];
if (!results.hasOwnProperty(main)){
results[main]=second;//create new string for this main
}else //element with main exists so add next number
results[main]+=","+second;//concat to string
}
console.log("Temporary object structure:");
console.log(results);
//ok we have array with results but we need string
var resultsStr="";
//##3. Create final string
for ( var main in results){
if (resultsStr!="")
resultsStr+="|"; //add | not for first one
resultsStr+=main+"("+results[main]+")"; //add () to our string
}
console.log("Final string:");
console.log(resultsStr);
算法步骤:
- 我分割数组,
- 我创建了一个临时结构,我通过主数字创建属性,它们的值是从第二个数字连接的字符串 我基于临时结构创建字符串。
即使主数顺序不对,算法也会运行。
相关文章:
- 对象拟合:获取结果尺寸
- Mongodb$in以与数组中相同的顺序获取结果
- 获取结果未定义(主干.js)
- 无法从IE中的data.responseText获取结果,但在其他浏览器中工作
- 从sqlite数据库获取结果
- 谷歌地图-从连接的结果[1].formated_address中获取结果[0].formated_address
- 如何使用 HtmlUnit 从 JavaScript html 页面获取结果
- JS:如何从其函数中获取结果值
- GET 请求,但未在视图中获取结果
- 如何查询具有特定 id 的 json 文件并获取结果数组
- 从成功的AJAX帖子中获取结果,并使用globalEval设置HTML
- 如何使用 Parse.promise javascript 定义一个承诺数组并获取结果数组 [parse.com]
- 通过 javascript 从 LinkedIn API 获取结果
- Ajax 从 sql 查询中获取结果
- 如何在“node-mysql”查询中获取结果的值
- 如何先从Firebase获取结果,然后重定向到另一个页面
- 使用javascript从struts.xml获取结果
- 如何从请求主体获取结果
- 从nodejs中的第二个函数中获取结果
- Angularjs:无法迭代或从服务结果中获取结果