Lodash在数组值中找到部分唯一性

时间:2016-05-24 10:18:00

标签: javascript arrays node.js lodash

以下代码返回data数组中唯一值的数组。但是,如果在value1:value2找到唯一性,我想要实现的是返回true。从下面的代码中可以看出value1:value2:value3value1:value2:value4符合此条件。用于生成此功能的 lodash 技术将是理想的,但是为了理解解决方案,我很乐意欢迎简单的“ol”javascript。

注意包含了jQuery和HTML来说明我的问题。我追求的javascript将在NodeJS上运行。

更新

运行以下代码的预期输出为true,因为value1:value2:value3value1:value2:value4之间存在匹配,即两个值中都存在value1:value2

更新

请参阅以下fiddle以获取我之后输出的示例。

更新

包含了我之后的输出示例。这是所需的功能,但我想要一种 lodash 方式来实现相同的结果。

$(document).ready(function() {
  var data = [
    'value1:value2:value3',
    'value1:value2:value4',
    'value5:value6:value7',
    'value1:value2:value3'
    ];
  var partialValueMatch = function(data) {
    var lookup = _.uniqBy(data, function(str){
      return str.substring(0, str.lastIndexOf(':'))
    });
    if(lookup.length < data.length) return true;
    return false;
  }
  var $output = $('#output');
  $output.html(partialValueMatch(data));
});
#output {
  background: #fafafa;
  border: 1px solid #d8d8d8;
  padding: 5px 10px;
  font-family: monospace;
  border-radius: 2px;
  color: red;
  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-rc1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>
<div id="output"></div>

1 个答案:

答案 0 :(得分:2)

您可以使用_.uniqBy

 var data = [
    'value1:value2:value3',
    'value1:value2:value4',
    'value5:value6:value7',
    'value1:value2:value3'
    ];

var output = _.uniqBy(data,function(str){
   return str.substring(0,str.lastIndexOf(':'))
 });
console.log(output);
console.log('Is duplicates found:',output.length<data.length);

这将为您提供以下的uniq数据

//["value1:value2:value3", "value5:value6:value7"]
//Is duplicates found: true