简体   繁体   English

Javascript按多维对象/数组中的值查找和删除

[英]Javascript find and delete by value in multidimensional object/array

What I basically need is to find item in multidimensional array and delete only it. 我基本上需要的是在多维数组中查找项目并仅将其删除。 The problem is that there are more then one same object keys in this. 问题在于,在此中有多个相同的对象键。

array example (copied from console): 数组示例(从控制台复制):

gameDetails.betsArray = [{
    '1.02': {
        userDetails: {
            socketID: '/#32EZlk6tW03tNgnOAAAA',
            userID: 1
        },
        trigger: 110,
        parseD: 1.02
    }
}, {
    '1.02': {
        userDetails: {
            socketID: '/#32EZlk6tW03tNgnOAAAA',
            userID: 5
        },
        trigger: 881,
        parseD: 1.02
    }
}]

how array is being made 如何制作数组

gameDetails.betsArray[validator.toFloat(betDetails.breakAt)] = {
    userDetails: {
        socketID: socketID,
        userID: connectedUsers[socketID].id
    },
    betAmount: validator.toInt(betDetails.amount),
    breakAt: validator.toFloat(betDetails.breakAt)
};

and I want to find object by key which is 1.02 and object.userDetails.userID = 5 我想key 1.02和object.userDetails.userID = 5查找对象

what I have tried and it didn't worked for me: 我尝试过的方法对我没有用:

gameDetails.betsArray.map(function (details, key) {
    if (details.userDetails.userID == connectedUsers[socketID].id &&
        details.trigger == validator.toFloat(betDetails.trigger)) {
        delete gameDetails.betsArray[key];
    }
});

how is it possible to make? 如何制造? In the final step I want to remove data from the array of found object. 在最后一步中,我想从找到的对象数组中删除数据。

Attempt of a solution with a valid data structure and Array#filter 尝试使用有效的数据结构和Array#filter解决方案

 [ { "1.02": { "userDetails": { "socketID": "/#32EZlk6tW03tNgnOAAAA", "userID": 1 }, "trigger": 110, "parseD": 1.02 } }, { "1.02": { "userDetails": { "socketID": "/#32EZlk6tW03tNgnOAAAA", "userID": 5 }, "trigger": 881, "parseD": 1.02 } } ] 

 var data = [{ '1.02': { userDetails: { socketID: '/#32EZlk6tW03tNgnOAAAA', userID: 1 }, trigger: 110, parseD: 1.02 } }, { '1.02': { userDetails: { socketID: '/#32EZlk6tW03tNgnOAAAA', userID: 5 }, trigger: 881, parseD: 1.02 } }]; data = data.filter(function (a) { return !a['1.02'] || a['1.02'].userDetails.userID !== 5; }); console.log(data); 

First you need to change your data structure to valid javascript data for example array of objects like this and then you can use filter() 首先,您需要将数据结构更改为有效的javascript数据,例如像这样的对象数组,然后可以使用filter()

 var obj = [{ '1.02': { userDetails: { socketID: '/#32EZlk6tW03tNgnOAAAA', userID: 1 }, trigger: 110, parseD: 1.02 } }, { '1.02': { userDetails: { socketID: '/#32EZlk6tW03tNgnOAAAA', userID: 5 }, trigger: 881, parseD: 1.02 } }] var result = obj.filter(function(e) { if (e['1.02'] && e['1.02'].userDetails.userID == 5) return e; }); console.log(result) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM