Javascript对象作为一种迷你数据库?

时间:2018-02-04 03:50:46

标签: javascript arrays database object

是否可以将JavaScript对象用作迷你数据库?我经常发现自己在使用JS进行编码时需要一种数据库结构,但使用像MySQL(或类似)这样的实际数据库感觉有些过分。

作为一个例子,让我们说我需要将这些数据构建为JS对象:

对象构思:卖东西的东西 要出售的物品:车库中的垃圾
对象结构:列出所有项目,包括商品 名称 ,商品 条件 和商品的

为了把它变成一个JS对象,我想写一下:

var stuffToSell = {};

然后我的第一个项目可能看起来像:

var stuffToSell = {
    item : "Coffee Maker",
    condition : "Good",
    price : 5
};

现在对我来说,这似乎是我在正确的轨道上,直到我来添加另一个项目,我最终不得不使用属性itemcondition和{{ 1}}再次出现在同一个JS对象中 - 感觉不对? - 还是??在这一点上,我的大脑一直喊着“#AR; ARRAY!”这个词。在我看来,但我无法看到如何在对象内部使用数组,或者在数组中使用对象来实现我想要的目标。

我的最终目标(在此简化示例中)是能够使用面向对象的语法来访问某些项目并找出有关该项目的特定信息,例如price,{{1}例如,如果我想知道price的价格,我想写一些类似的东西:

condition

...然后上面的结果应为"coffee maker"

我觉得我在正确的轨道上,但我想我错过了阵列部分?有人可以告诉我我错过了什么,或者说我做错了什么!如果在同一个JS对象中有重复的属性名称是错误的吗?例如,是否可以:

stuffToSell["coffee maker"].price

......这似乎不对,因为那时JS如何知道哪个5与哪个var stuffToSell = { item : "Coffee Maker", price : 5, item : "Mountain Bike", price : 10, item : "26 inch TV", price : 15 }; ??

提前致谢:)

3 个答案:

答案 0 :(得分:1)

您实际上可以使用json或创建一个对象数组。如果使用单独的文件来存储对象,请先加载该文件。使用数组过滤器方法获取一个与过滤条件匹配的新数组,就像你想获得id为1的项一样。这将返回一个对象数组。

var dict = [{
    'id': 1,
    'name': 'coffee-mug',
    'price': 60
  },
  {
    'id': 2,
    'name': 'pen',
    'price': 2
  }
]

function getItemPrice(itemId) {
  var getItem = dict.filter(function(item) {
    return item.id === itemId
  });
  return getItem[0].price;
}

console.log(getItemPrice(1))

答案 1 :(得分:1)

JSON对象不支持重复键,因此您需要设置唯一键。

将一个ID作为您的项目分组的对象:

var stuffToSell = {
  '1': {
    item: "Coffee Maker",
    price: 5
  },
  '2': {
    item: "Mountain Bike",
    price: 10
  }
  .
  .
  .
}

现在您可以非常快速地访问商品的价格。

请查看此代码段(已知ID)

var stuffToSell = {
  '1': {
    item: "Coffee Maker",
    price: 5
  },
  '2': {
    item: "Mountain Bike",
    price: 10
  },
  '3': {
    item: "26 inch TV",
    price: 15
  }
};

let getPrice = (id) => stuffToSell[id].price;

console.log(getPrice('1'));
看到?快速访问您的项目,您的代码遵循可读的结构。

请查看此代码段(项目名称为键)

var stuffToSell = {
  'Coffee Maker': {
    price: 5
  },
  'Mountain Bike': {
    price: 10
  },
  '26 inch TV': {
    price: 15
  }
};

let getPrice = (id) => stuffToSell[id].price;

console.log(getPrice('Coffee Maker'));

请查看此代码段(项目名称:价格)

var stuffToSell = {
  'Coffee Maker': 5,
  'Mountain Bike': 10,
  '26 inch TV': 15
};

let getPrice = (id) => stuffToSell[id];

console.log(getPrice('Coffee Maker'));

答案 2 :(得分:1)

你肯定是在正确的轨道上!

很多人会将您所说的内容称为hash

以下是我建议的结构:

var store = {
        coffee_maker: {
                id: 'coffee_maker',
                description: "The last coffee maker you'll ever need!",
                price: 5,
        },
        mountain_bike: {
                id: 'mountain_bike',
                description: 'The fastest mountain bike around!',
                price: 10,
        },
        tv: {
                id: 'tv',
                description: 'A big 26 inch TV',
                price: 15,
        },
}

拥有这样的结构可以让你这样做:

store.mountain_bike.price // gives me 10

需要一个数组,比如过滤或循环?

Object.keys为您提供商店['coffee_maker', 'mountain_bike', 'tv']

中所有对象键的数组
// Now we just have an array of objects 
// [{id: 'coffee_maker', price: 5}, {id: 'mountain_bike', price: 10} ...etc]
var arr = Object.keys(store).map(el => store[el])

只需过滤小于10的项目

这将为我们提供一系列低于10的产品:

// gives us [{id: 'coffee_maker', price: 5}]
var productsUnder10 = arr.filter(el => el.price < 10)

这些技术可以链接:

var productsOver10 = Object.keys(store)
    .map(el => store[el])
    .filter(el => el.price > 10)

需要添加产品吗?

store['new_product'] = {
    id: 'new_product',
    description: 'The Newest Product',
    price: 9000,
}

这是另一种方式,开始习惯会很好。 这是一种“安全”的方式来更新商店,阅读javascript的不变性以了解它

store = Object.assign({}, store, {
    'new_product': {
        id: 'new_product',
        description: 'The Newest Product',
        price: 9000,
    }
})

...另一种方式,你也应该阅读并开始使用: 这是对象扩展运算符,基本上只是一种使用不可变结构的简单方法

store = {
    ...store,
    'new_product': {
        id: 'new_product',
        description: 'The Newest Product',
        price: 9000,
    }
}

资源