请帮助将数据转换为正确格式,可能使用reduce方法
const testData = { a: [1], b: [2, 3, 4], c: [] };
应为a = 1& b = 2,3,4 返回a = 1& b = 2,3,4&
const createUrlString = params =>
Object.keys(params)
.map(
attr => (params[attr].length ? `${attr}=${params[attr].join(',')}` : '')
)
.join('&');
const testData = { a: [1], b: [2, 3, 4], c: [] };
const filterString = createUrlString(testData);
答案 0 :(得分:1)
"过滤器"方法会做的工作。
const createUrlString = params =>
Object.keys(params)
.map(
attr => (params[attr].length ? `${attr}=${params[attr].join(',')}` : '')
)
.filter(paramStr => paramStr)
.join('&');
答案 1 :(得分:0)
您可以使用array#map
而不是array#reduce
。对于空的数组值,您要插入''
字符串,这就是array#join
最后添加&
的原因。
const testData = { a: [1], b: [2, 3, 4], c: [] };
var result = Object.keys(testData).reduce((r,k) => {
if(Array.isArray(testData[k]) && testData[k].length) {
r.push(`${k}=${testData[k].join(',')}`);
}
return r;
},[]).join('&');
console.log(result);

答案 2 :(得分:0)
您可以使用Object.entries()
将对象转换为多维数组
Object.entries({ foo: 'bar', baz: 42 });
将返回
[ ['foo', 'bar'], ['baz', 42] ]
请参阅以下代码:
const createUrlString = params =>
Object.entries(params)
.map( el => el[0]+"="+el[1].join(","))
.join('&');
const testData = {
a: [1],
b: [2, 3, 4],
c: []
};
const filterString = createUrlString(testData);
console.log(filterString)
答案 3 :(得分:0)
您需要先过滤数据:
const testData = { a: [1], b: [2, 3, 4], c: [] };
let filteredData = Object.entries(testData).filter(t => t[1].length > 0);//Filter empty values
var result = filteredData.map(t => {
t[1].join(',');
return t.join('=');
}).join('&');
答案 4 :(得分:-1)
追加&总是非空,最后删除最后一个
const createUrlString = params =>
Object.keys(params)
.map(
attr => (params[attr].length ? `${attr}=${params[attr].join(',')}&` : '')
)
.join('');
const testData = { a: [1], b: [2, 3, 4], c: [] };
const filterString = createUrlString(testData);
console.log(filterString.slice(0,filterString.length-1));