Javascript散列

Javascript散列,javascript,Javascript,我有这个杂烩: { a: [1,2], b: [1,2,3] } 我需要生成如下字符串: a=1&a=2&b=1&b=2&b=3 我怎样才能解决这个问题? 我正在查看lodash,但我无法解决它 谢谢。你可以用它。如果您恰好超过整数,它还将处理所有需要的编码 qs.stringify({ a: [1,2], b: [1,2,3] }, { indices: false }); 对于一个好的ES5解决方案: 这将添加我们的属性名,该属性名保存为来自for的prop。。。在循

我有这个杂烩:

{
 a: [1,2],
 b: [1,2,3]
}
我需要生成如下字符串:

a=1&a=2&b=1&b=2&b=3

我怎样才能解决这个问题? 我正在查看lodash,但我无法解决它

谢谢。

你可以用它。如果您恰好超过整数,它还将处理所有需要的编码

qs.stringify({
    a: [1,2],
    b: [1,2,3]
}, { indices: false });
对于一个好的ES5解决方案: 这将添加我们的属性名,该属性名保存为来自for的prop。。。在循环中,然后指定索引i处该属性数组中的值。我们将留下一个尾随&我们将在循环外部删除它。

使用javascript,并使用 var arr={ 答:[1,2], b:[1,2,3] }; var res=Object.keysarr.mapv=>arr[v].mapv1=>v+'='+v1.join'&'.join'&';
文件编写者 使用for-in循环迭代哈希对象中的每个属性,然后将每个值添加到字符串中,如下所示:

function hashToQueryString(hash) {
    var query = '';
    for (key in hash) {
        for (i=0; i<=key.length; i++) {
            query += key+'='+ myJSON[key]+'&';
        }
    }
    //remove the trailing &
    query = query.substr(0, query.length -1);
    return query;
}

请记住,您还应该检查散列中的每个属性是否包含有效数组,并且如果您必须继续使用糟糕的旧ES5,并且不想使用另一个库执行简单任务,您不会意外地枚举任何不想要的属性:


我相信有一个更干净的方法,但是这里有一些使用reduce和map的选项

var obj = {
 a: [1,2],
 b: [1,2,3]
};

var params = Object.keys(obj).reduce( function (arr, key){
    arr.push(key + "=" + obj[key].join("&" + key + "="))
    return arr; 
}, []).join("&");
或者如果需要为querystring对值进行编码

var params = Object.keys(obj).reduce( function (arr, key){
    var mapped = obj[key].map( function (val) { return key + "=" + encodeURIComponent(val); }).join("&");
    arr.push(mapped)
    return arr; 
}, []).join("&");
让散列={ 答:[1,2], b:[1,2,3] }; 设str=; 对于哈希中的let键{ 用于哈希[键]的let值{ str+=`${key}=${value}&`; } }
alertstr.0,-1;你试过什么?你为什么要看洛达斯?为什么不使用一个简单的循环呢?也许你可以看看一些想法,除非你知道有足够多的用户支持你想要的功能,否则我仍然不会使用ES6解决方案。我会坚持其中一个简单的循环,包括我的答案。这不是所示问题的重复!像A=1&A=2这样的字符串将覆盖前面的A变量。这不是原始海报所要求的。我同意@Martin:不是同一个问题,也没有提供合适的解决方案。所以我决定重新开放。。。可能会有一个复制品,但提议的不是它这就是为什么有这么多库,这么简单的任务只有几行代码,为什么要建一个新的图书馆:@musefan这些图书馆可以释放你的脑力,这样你就可以把它花在真正有创造性的任务上,而不是花在那些已经被其他人正确解决的任务上。@Li0liQ这不是为一项任务建一个图书馆的好理由。如果你需要图书馆的其余部分,也许。。。如果您需要这一点,那么编写自己的代码比查找、安装和学习library@Martin很公平。然而,您是否注意到,在建议的7个答案中,只有两个考虑了url编码?这难道不是依赖经过彻底测试的库的充分理由吗?这正是我写的,只是为了好玩,而不是两个连接,如果输入不包含任何comas:Object.keysarr.mapv=>arr[v]。mapv1=>v+'='+v1.join.replace/,/g'&:我认为你稍微夸大了你的答案,但它是100%正确和有用的。抓住+1:。是的,这有点冗长。但是当我开始的时候,我从这样的长答案中学到了很多。它们不仅可以向您展示正确的代码,还可以向您展示编码时的思维方式。当我把它放在一起时,我喜欢展示我的思路是什么,因为这种思维方式通常会在未来的问题中有所帮助:
var myHash = {
   a: [1,2],
   b: [1,2,3]
}
var myString = '';
Object.keys(myHash).map(function(key, index) {
  myHash[key].map(function(value) {
    myString += (myString ? '&' : '') + key + '=' + value;
  });
});
var obj = {
 a: [1,2],
 b: [1,2,3]
};

var params = Object.keys(obj).reduce( function (arr, key){
    arr.push(key + "=" + obj[key].join("&" + key + "="))
    return arr; 
}, []).join("&");
var params = Object.keys(obj).reduce( function (arr, key){
    var mapped = obj[key].map( function (val) { return key + "=" + encodeURIComponent(val); }).join("&");
    arr.push(mapped)
    return arr; 
}, []).join("&");