按条件

时间:2018-03-07 05:51:19

标签: javascript arrays sorting

请帮助将数据转换为正确格式,可能使用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);

5 个答案:

答案 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));