从对象数组返回包含特定参数的随机对象

时间:2019-05-01 13:37:58

标签: javascript

我目前正在通过以下方式将数据存储为数组内的对象:

let data = [];

module.exports.init = function() {
    database.pool.query("SELECT * FROM data", (error, rows) => {
        if (error) {
            logUtil.log.error(`Loading failed: ${ error.message }`);
        }
        else {
            rows.forEach((row) => data.push({dimension: row.dimension, x: row.x, y: row.y, z: row.z}));
            logUtil.log.info(data);
        }
    });
};

数据现在将包含以下内容:[{ dimension: 2, x: -973.097, y: -133.411, z: 38.2531 }, { dimension: 3, x: -116.746, y: -48.414, z: 17.226 }, { dimension: 2, x: -946.746, y: -128.411, z: 37.786 }, { dimension: 2, x: -814.093, y: -106.724, z: 37.589 }]

现在,我正在尝试从此数组中接收一个存储特定维度参数的随机对象。

例如,我想返回一个存储维度的 random 对象: 2

我尝试使用类似以下的方法过滤数组:

let result = jsObjects.filter(data => {
  return data.dimension === 2
})

然后从结果中返回一个随机对象。

问题:如何以最佳方式接收此随机对象?

2 个答案:

答案 0 :(得分:1)

您可以分两步进行。

  1. 获取所有符合dimension === 2

    等条件的记录

    let resultArr = jsObjects.filter(data => { return data.dimension === 2 })

  2. 从结果中获取随机对象。

    var randomElement = resultArr[Math.floor(Math.random() * resultArr.length)];

var arr = [{ dimension: 2, x: -973.097, y: -133.411, z: 38.2531 }, { dimension: 3, x: -116.746, y: -48.414, z: 17.226 }, { dimension: 2, x: -946.746, y: -128.411, z: 37.786 }, { dimension: 2, x: -814.093, y: -106.724, z: 37.589 }]

//Filter out with specific criteria
let resultArr = arr.filter(data => {
  return data.dimension === 2
})

//Get random element
var randomElement = resultArr[Math.floor(Math.random() * resultArr.length)];

console.log(randomElement)

答案 1 :(得分:0)

您可以使用Math.random()并在数组0length的范围内使用。

let result = jsObjects.filter(data => {
  return data.dimension === 2
})
let randomObj = result[Math.floor(Math.random() * result.length)]