计算对象列表中的重复值

时间:2019-07-09 05:50:40

标签: javascript arrays reactjs

我正在解析数据库中的一些数据。但是我不想显示重复数据,也不想统计对象列表中有多少重复数据。我想用React.js来做

这是我的解析数据

parsing data

我不希望Jobaer或Web出现多次,我希望它显示如下:

 jobaer : 3
 web: 2

我已经创建了一个函数来执行此操作,但是它不起作用。

 this.state = {
                clientReqList:[],
               }

getClientReqList = () => {
        axios.get( this.state.apiUrl+'/api/v1/SalesLead/getAll', {})
            .then((response) => {
                 console.log("response",response.data.data);
                this.setState({ clientReqList: response.data.data  });
            }).catch((error)=>{  console.log("error",error); this.setState({ clientReqList: []  });   });
    };

    count() {
            var array_elements= this.state.clientReqList;
            document.write(array_elements)
            array_elements.sort();

            var current = null;
            var cnt = 0;
            for (var i = 0; i < array_elements.length; i++) {
                if (array_elements[i] != current) {
                    if (cnt > 0) {
                        document.write(current + ' comes --> ' + cnt + ' times<br>');
                    }
                    current = array_elements[i];
                    cnt = 1;
                } else {
                    cnt++;
                }
            }
            if (cnt > 0) {
                document.write(current + ' comes --> ' + cnt + ' times');
            }


        }

结果显示:

[object Object] comes --> 1 times
[object Object] comes --> 1 times

有人可以引导我做这个吗?

1 个答案:

答案 0 :(得分:0)

Spread运算符是实现该目标的最简单方法。

您可以找到一个简短的例子: https://jsbin.com/gapeqewubo/edit?js,console,output

const results = {
 jobaer: 3,
 web: 2,
 anotherone: 4,
 web: 2,
 jobaer: 3
}

const uniqueResults = {
  ...results
}

与此有关的有趣文章:

https://codeburst.io/a-simple-guide-to-destructuring-and-es6-spread-operator-e02212af5831

https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/

请注意,看起来唯一的操作员与点差操作员完全相同 区别在于在方法参数中使用了rest运算符。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters