基于对象属性和值的Pop数组元素

时间:2018-05-18 18:19:35

标签: javascript

我想知道如何通过对象属性和值从数组中提取单个对象, 以下内容:

let arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}]
let Obj = arr.pop({night:true})
// obj: {temp:12, night: true}
// arr now: [{temp:36, night: false}, {temp:24, night: true}]

有什么建议吗?

6 个答案:

答案 0 :(得分:0)

创建自己的函数,迭代目标数组,并拼接到新数组

function removeElements(arr, prop, value) {
    let poppedElems = [];
    for (let i = arr.length - 1; i >= 0; i--) {
        if (arr[i].hasOwnProperty(prop) && arr[i][prop] === value) {
            poppedElems = poppedElems.concat(arr.splice(i, 1));
        }
    }

    return poppedElems
}

如果您只想要第一个:

function findElement(arr, prop, value) {
    let elem = null;
    let elemIndex = arr.findIndex(x => x.hasOwnProperty(prop) && x[prop] === value);

    if (elemIndex !== -1) {
        elem = arr.splice(elemIndex, 1)[0];
    }         

    return elem;
}

答案 1 :(得分:0)

  1. 制作循环
  2. 检查属性值
  3. 使用splice删除表格数组并打破循环
  4. 
    
    let arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}],
        test = {night:true};
        required = null;
        
    
    
    function doTheStuff(obj, arr){
    for(var i=0; i<arr.length; i++){
    
        if(arr[i].night == test.night){
             required = arr[i]
             arr.splice(i,1);
             break;
        }
    }
    }
    
      doTheStuff(test,arr)
    console.log("required" , required)
    console.log("arr", arr)
    &#13;
    &#13;
    &#13;

答案 2 :(得分:0)

使用以下数组:

let arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}];

最简单的方法是使用 findIndex()方法。

返回night为false的第一个元素:

let index = arr.findIndex(elem => !elem.night);
// index = 0

返回night为true的第一个元素:

let index = arr.findIndex(elem => elem.night)
// index = 1

然后获取元素:

let obj = arr[index];

答案 3 :(得分:-1)

您可能希望使用 String[] strs = {"a","a","a"}; boolean isAllEqual = Arrays.stream(strs).allMatch(e->e.equals("a")); System.out.println(isAllEqual); ,它会找到满足所提供测试功能的第一个元素的索引。 findIndex也可以使用,但是您不知道它在数组中的位置,因此如果需要,您无法删除它。 find允许您将参数传递到bind,这样您就可以选择属性和搜索值,而无需编写更多函数。

一个工作的例子是

findMatch

答案 4 :(得分:-1)

find方法获取第一个night: false

的方法
let arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}]
arr = arr.find(a => !a.night)
console.log(JSON.stringify(arr))

答案 5 :(得分:-1)

最初误解了这个问题。修改后的答案尽可能简洁:

var arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}];
let obj;

var key = 'night';
var value = true;


for(var item in arr){
  if(arr[item][key]==value){
    obj = arr[item];
    arr.splice(item,1);
    break;
  }
}