Javascript(ES6)从中选择和过滤对象以及从数组中删除对象并将其从原始数组中删除的方法

时间:2019-01-15 10:16:29

标签: javascript arrays ecmascript-6

有没有一种方法可以过滤对象数组以检索所需的值数组,还可以从原始列表中删除过滤后的值。像这样

let array = [1, 2, 3, 4, 5];
const filteredList, listContainingRemainingValues = array.filter(value => value > 3);

输出:

filteredList = [4, 5];
listContainingRemainingValues = [1, 2, 3];

是否已经有内置功能可以使用Javascript完成此操作,或者我必须自己动手做?

5 个答案:

答案 0 :(得分:1)

您可以将阵列用作所需结果的临时存储。

const
    array = [1, 2, 3, 4, 5],
    [remaining, filtered] = array.reduce((r, v) => (r[+(v > 3)].push(v), r), [[], []]);

console.log(filtered);
console.log(remaining);

与lodash的_.partition

const
    array = [1, 2, 3, 4, 5],
    [filtered, remaining] = _.partition(array, v => v > 3);

console.log(filtered);
console.log(remaining);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

答案 1 :(得分:0)

对数组进行排序,找到阈值的索引,然后进行拼接,以便从输入数组中删除元素并返回删除的元素:

const array = [1, 2, 3, 4, 5];
// just if the input array is not already sorted
array.sort();
const removedElements = removeAndGet(array, 3);
console.log('input array:', array);
console.log('removed elements:', removedElements)

function removeAndGet(input, thresholdValue) {
  const ind = input.findIndex(a => a > thresholdValue);
  return ind > -1 ? input.splice(ind) : [];
}

答案 2 :(得分:0)

这里是一个选择:

const array = [1, 2, 3, 4, 5];

// Get all the indices we want to keep:
const matchingIndices = array
        .map((v, i) => [i, v > 3])
        .filter((el) => el[1])
        .map((el) => el[0]);

// Filter the input array by indices we want/don't want
const matching = array.filter((v, i) => matchingIndices.indexOf(i) >= 0);
const nonMatching = array.filter((v, i) => matchingIndices.indexOf(i) < 0);

答案 3 :(得分:0)

使用2个过滤器

let array = [1, 2, 3, 4, 5];
let filteredList = array.filter(value => value > 3);
let listContainingRemainingValues = array.filter(f => !filteredList.includes(f))
console.log(filteredList)
console.log(listContainingRemainingValues)

答案 4 :(得分:0)

这是使用underscore库的方法之一:

var data = [1, 2, 3, 4, 5]

var x = _.reject(data, function(num){ return num > 3; });
var y = _.difference(data, x);

console.log(x);
console.log(y);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>